【发布时间】:2016-01-23 21:29:50
【问题描述】:
我正在尝试编写一个 C 函数,它从文件中读取第一行文本,然后使用 fseek() 和 ftell() 获取文件其余部分的大小(文件减去第一行)。
我的想法是使用第二个FILE *fp1 来获取原始FILE *fp 的位置,并将fp1 发送到带有fseek() 的文件末尾,这样我就不必移动我的原来的fp 并失去了它的位置。
这是我的代码。编译器告诉我我不能将fp1 分配给fp,因为fp1 是FILE* 而fp 是struct FILE*。
我可以通过这种方式实现我想要做的事情吗?
FILE *fp, fp1;
fp = fopen(filename, "r");
if (!fp)
return 0;
fscanf(fp, "%1d", m); //Lines 15-18 read the first line of the file
fscanf(fp, "%*1c");
fscanf(fp, "%1d", n);
fscanf(fp, "%*1c");
fp1 = fp; //<---------- This is my problem.
//how do I set fp1 to the same place in the
//file as fp?
fseek(fp1, 0, SEEK_END);
*file_size = ftell(fp1);
【问题讨论】:
-
您可以通过将
fp1正确声明为指针来修复编译错误 - 缺少*。那是FILE *fp, *fp1;。但这不是保存文件位置的正确方法(两个指针都指向同一个打开的流,因此指向同一个文件位置)。 -
不要贴带行号的代码,不方便剪切粘贴测试。