Неизвестные символы, когда я читаю файл - PullRequest
0 голосов
/ 27 марта 2010

Я читаю файл, но в конце файла я получаю неизвестные символы:

int main()
{
        char *buffer, ch;
        int i = 0, size;
        FILE *fp = fopen("file.txt", "r");
        if(!fp){
                printf("File not found!\n");
                exit(1);
        }
        fseek(fp, 0, SEEK_END);
        size = ftell(fp);
        printf("%d\n", size);
        fseek(fp, 0, SEEK_SET); 
        buffer = malloc(size * sizeof(*buffer));
        while(((ch = fgetc(fp)) != NULL) && (i <= size)){
                buffer[i++] = ch;
        }
        printf(buffer);
        fclose(fp);
        free(buffer);
        getch();
        return 0;
}

Ответы [ 4 ]

1 голос
/ 27 марта 2010

Эти две строки идут в бар:

В первой строке написано: «Я думаю, что у меня будет пивная болтовня Фулк Боорг Дж.Д.К.

«Пожалуйста, извините, мой друг», вторая строка говорит: «Он не завершен нулем».

1 голос
/ 27 марта 2010

сначала вам нужно выделить size + 1 байт, чтобы освободить место для завершающего символа NULL:

buffer = malloc((size + 1) * sizeof(*buffer));

, затем перед печатью убедитесь, что строка завершена NULL: buffer[size] = '\0';

наконец, вы неправильно используете printf, должно быть

printf("%s", buffer);

см. руководство по печати .

1 голос
/ 27 марта 2010

Вам нужно добавить символ null в конце буфера перед печатью:

while(((ch = fgetc(fp)) != NULL) && (i <= size)){
    buffer[i++] = ch;
}
buffer[i] = 0; // add a null char at the end.
printf("%s",buffer); // print using %s format specifier.
0 голосов
/ 27 марта 2010

Вы, кажется, ожидаете символ NULL в конце файла, вам действительно следует вместо этого ждать символа EOF (конец файла).

Изменить эту строку:

      while(((ch = fgetc(fp)) != NULL) 

К этому:

      while(((ch = fgetc(fp)) != EOF) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...