Olá Murilo! Como vai?
Esse comportamento pode estar ocorrendo devido ao uso do modo de abertura do arquivo e à forma como o ponteiro do arquivo está sendo manipulado. Quando você abre o arquivo no modo "r+"
, ele permite leitura e escrita, mas não necessariamente posiciona o ponteiro no final do arquivo para a escrita.
Aqui estão algumas sugestões para corrigir o problema:
Verifique o Modo de Abertura do Arquivo:
Certifique-se de que está usando o modo correto para a operação desejada. Para adicionar ao final do arquivo sem sobrescrever, o modo "a"
pode ser mais apropriado, mas como você também precisa ler e modificar o início, o "r+"
é necessário.
Manipule o Ponteiro Corretamente:
Quando você usa fseek(f, 0, SEEK_END);
, o ponteiro deve ir para o final do arquivo, mas verifique se isso está sendo feito corretamente antes de fprintf
.
Verifique o Uso de fprintf
:
Certifique-se de que está usando o fprintf
corretamente para adicionar um \n
antes da nova palavra, para garantir que ela seja escrita em uma nova linha.
Verifique o Buffer:
Pode ser interessante adicionar um fflush(f);
após o fprintf
para garantir que o buffer seja escrito no arquivo corretamente.
Aqui está um exemplo de como você pode ajustar o código:
void adicionapalavra() {
char quer;
printf("Você deseja adicionar uma nova palavra no jogo (S/N)?");
scanf(" %c", &quer);
if(quer == 'S') {
char novapalavra[20];
printf("Digite a nova palavra, em letras maiúsculas: ");
scanf("%s", novapalavra);
FILE* f;
f = fopen("palavras.txt", "r+");
if(f == 0) {
printf("Banco de dados de palavras não disponível\n\n");
exit(1);
}
int qtd;
fscanf(f, "%d", &qtd);
qtd++;
fseek(f, 0, SEEK_SET);
fprintf(f, "%d", qtd);
fseek(f, 0, SEEK_END);
fprintf(f, "\n%s", novapalavra);
fclose(f);
}
}
Espero que isso ajude a resolver o problema dos caracteres nulos. Bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.