您可以将数组的任何索引设置为起始索引,即从文件中读取的位置吗?我担心缓冲区是否会在此过程中被破坏。
#include <stdio.h>
int main()
{
FILE *f = fopen("C:\\dummy.txt", "rt");
char lines[30]; //large enough array depending on file size
fpos_t index = 0;
while(fgets(&lines[index], 10, f)) //line limit is 10 characters
{
fgetpos (f, &index );
}
fclose(f);
}
答案 0 :(得分:1)
你可以,但是由于你的代码试图读取文件的全部内容,你可以用fread直接做更多的事情:
char lines[30];
// Will read as much of the file as can fit into lines:
fread(lines, sizeof(*lines), sizeof(lines) / sizeof(*lines), f);
那就是说,如果你真的想逐行阅读并安全地进行阅读,你应该将你的fgets行更改为:
// As long as index < sizeof(lines), guaranteed not to overflow buffer
fgets(&lines[index], sizeof(lines) - index, f);
答案 1 :(得分:0)
lines[index]
是数组lines
的索引字符。它的地址不是索引的第一行。
如果你想跳到一个特定的行,比如说5,那么为了读取第5行,读4行并且不做任何操作,他们读下一行并用它做点什么。
如果您需要跳转到文件中的特定BYTE,那么您要使用的是fseek()。
另外:注意你告诉fgets为你读取的字节数(10)与你将该行放入(30)的数组的大小相同 - 所以现在不是这样的
如果你需要从该行中的某个字符开始读取一行的一部分,你仍然需要读取整行,然后只选择使用从开头以外的某个地方开始的一部分行。
这两个例子都是从网站或图书馆请求文档的一部分 - 他们不会为你撕掉一个页面,你得到整个文档,你必须翻转你想要的东西
答案 2 :(得分:0)
不喜欢这个没有。有一个名为fseek的函数可以将您带到文件中的其他位置。
您的代码会将文件读入缓冲区的不同部分(而不是读取文件的其他部分)。