1
resposta

[Bug] Escrita no arquivo gerando caracteres Null conforme o número total de palavras ao escrever uma nova palavra

Salve galerinha, estou tendo um bug (mas que não impede nem atrapalha o funcionamento do jogo da forca) onde ao escrever uma nova palavra, ele pula a linha, escreve ela normalmente, mas na frente da palavra anterior, ele adiciona um caractere Nulo * quantidade atual de linhas/palavras no arquivo. Alguém saberia por que isso ocorre, e como posso corrigir esse comportamento?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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 ✓.