2010-03-27 2 views
-1

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

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; 
} 

ответ

1

Вы должны добавить 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

@OP: Вам также необходимо внести изменения, связанные с размером, как упоминает Григорий. – codaddict

1

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

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

, то перед печатью убедитесь, что строка NULL прекращается: buffer[size] = '\0';

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

printf("%s", buffer); 

см printf manual.

+0

+1, для того, чтобы поймать ошибку размера..что я пропустил :) – codaddict

0

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

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

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

Для этого:

  while(((ch = fgetc(fp)) != EOF)
1

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

Первая строка говорит: «Я думаю, что я буду иметь пиво quag fulk boorg jdk^CjfdLk jk3s d # f67howe%^U r89nvy ~~ owmc63^Dz x.xvcu "

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

Смежные вопросы