为什么我不能从文件读入缓冲区?

时间:2015-10-09 03:39:54

标签: c

我有一个非空文件(list.txt),我试图读入缓冲区(缓存),然后将缓冲区打印到stdout。我尝试了以下3种不同的方法但没有成功。

FILE *list;
char *cache;
long size;

list = fopen("list.txt", "rb"); //open list.txt for reading

if (list==NULL) {
    perror ("Error opening file"); 
    exit(3);
    }

fseek(list, 0, SEEK_END);
if (ftell(list) == 0){
    fprintf(stdout, "list.txt is empty \n");
}

//three different methods - none seem to work. 
while(fgets(cache, sizeof(cache), list)) {}    //method 1
fprintf(stdout, "cache is %s\n", cache);

fgets(cache, sizeof(cache), list);             //method 2
fprintf(stdout, "cache is %s\n", cache);

if (fread(cache, size, 1, list) == 1){         //method 3
    fprintf(stdout, "successful fread: cache = %s\n", cache);
    }

我的输出如下:

cache is (null)
cache is (null)

我保证我的文件存在且不为空。如何在缓冲区中获取文件内容???

3 个答案:

答案 0 :(得分:2)

将内存分配给char指针cache。在fgets还要记住 free )之前,为其分配内存

注意 - 方法3中的变量size仍然未初始化,因此方法3没有机会工作。

答案 1 :(得分:1)

  1. 您没有为缓存分配内存。最好使用ftell()结果。
  2. 您使用" sizeof(缓存)"。请注意,这只是指针的大小 - 4或8个字节。

答案 2 :(得分:1)

问题1

derived2

fseek(list, 0, SEEK_END); 放在文件末尾。您需要回放文件才能读取其内容。

添加

list

在阅读文件内容之前。

问题2

在阅读之前,您还需要为rewind(list); 分配内存。

问题3

cache只读取一行文字。如果要阅读整个文件的内容,则需要使用fgets

尝试:

fread