我有一个非空文件(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)
我保证我的文件存在且不为空。如何在缓冲区中获取文件内容???
答案 0 :(得分:2)
您不将内存分配给char
指针cache
。在fgets
(还要记住 free
)之前,为其分配内存。
注意 - 方法3中的变量size
仍然未初始化,因此方法3没有机会工作。
答案 1 :(得分:1)
答案 2 :(得分:1)
问题1
derived2
将fseek(list, 0, SEEK_END);
放在文件末尾。您需要回放文件才能读取其内容。
添加
list
在阅读文件内容之前。
问题2
在阅读之前,您还需要为rewind(list);
分配内存。
问题3
cache
只读取一行文字。如果要阅读整个文件的内容,则需要使用fgets
。
尝试:
fread