2016-05-31 2 views
2

Функция fread, которую я использовал, не хранит содержимое в буфере. Всякий раз, когда я пытаюсь распечатать буфер, я ничего не получаю.Функция fread не сохраняется в буфер

Как решить эту проблему?

#include<stdio.h> 
#include<stdlib.h> 
int main(void) 
{ 
    FILE* ptr1 = fopen("try.txt","r"); 
    int count = 0; 
    while(fgetc(ptr1) != EOF) 
    { 
     count++; 
    } 
    char* buffer = malloc(sizeof(char)*count); 
    fread(buffer,sizeof(char),count, ptr1); 
    printf("%s",buffer); 
    fclose(ptr1); 
    free(buffer); 
} 
+6

1. Вам необходимо проверить возвращаемое значение 'fopen', чтобы убедиться, что оно выполнено успешно. 2. После цикла 'fgetc' поток находится в конце файла. Вам нужно ['rewind'] (http://linux.die.net/man/3/rewind) вернуться к началу файла. 3. Вам нужно «NUL» завершить данные, которые были прочитаны, поскольку «fread» вряд ли приведет к созданию строки. – kaylum

+1

Реферат: прочитайте документацию о функциях, которые вы вызываете, и полюбуйтесь кодами возврата, которые они предоставляют, чтобы вы не попали в яму нарушения [6-я заповедь Генри Спенсера для программистов C] (https://www.seebs.net/ с/10com.html). – WhozCraig

+0

Еще один приятный пример, почему проверка ошибок очень важна. Смотрите: Если код ничего не хранит, возможно, он не читал. Итак, первое, что нужно сделать, это RTFM на 'fread()', пытаясь выяснить, каким образом этот вызов может потерпеть неудачу, и если это произойдет, как он будет передавать это обратно вызывающему. – alk

ответ

0

Использование перемотки назад() функции после fgetc(), который устанавливает позицию файла в начало файла данного потока. Например,

rewind(ptr1); 
0

Когда вы подсчитываете символы в файле, вы перемещаете указатель fpos на EOF. Затем вы пытаетесь прочитать подсчитанное количество символов, что невозможно без перемотки для начала файла. Вы должны использовать перемотку.

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