filePointer在while循环中自动进行?

时间:2016-06-11 08:56:07

标签: c file file-pointer

我目前正在C中使用自己的文件。 我找到了一个解释从文件中读取字符串的代码。 但是我很好奇这是如何机械地起作用的。

while (!feof(fPointer)){
fgets(singleLine, 150, fPointer);
puts(singleLine);
}

在循环结束时,filepointer如何知道更多行?不应该在while循环结束时增加filepointer吗?

干杯

1 个答案:

答案 0 :(得分:4)

A(1:b*a,1) = reshape(mtimes((1:a).',ones(1,b)).',1,b*a) A(1:b*a,2) = reshape(mtimes((1:b).',ones(1,a)),1,b*a) 对象存储有关打开文件的信息,包括“当前位置”。每次读/写操作都会将当前位置增加读取/写入的字节数。这就是为什么你可以继续在一个循环中调用FILE(或任何其他输入函数)并获取内容,块大块。

同样,你可以多次调用fgets(或任何其他输出函数)来产生输出,它们不会相互覆盖。

您可以使用printfftell来获取和设置当前文件位置(受某些限制,例如标准C不需要fseek来返回文本上的实际字节偏移量文件,只是一些可以传递给ftell的“神奇数字”(但我在实际实现中从未见过)。

(您的fseek只指向一个fPointer对象。您不应该增加此指针;它只会指向随机内存。)

最后,FILE错误,因为while (!feof(fp))查询存储在feof对象中的“文件结束”位。它不会预测下一次读取是否会因为到达文件末尾而失败。在输入函数到达文件末尾后,“文件结束”位仅设置为true。这种循环将在文件结束后再次运行,然后处理垃圾(或从前一次迭代中过时)数据。