C getline startover
我使用C中的get line函数来读取文件的行。我想在函数上循环,这样我就可以读取文件n次。但出于某种原因,它在后续循环的开始处只读取一次(我认为在某个地方仍然有一个指针指向最后一行)。我如何让它复位 为了让事情更清楚,如果在下面的文件中有100行,那么最大的val将是100行,即使它应该达到300行 谢谢C getline startover,c,for-loop,getline,C,For Loop,Getline,我使用C中的get line函数来读取文件的行。我想在函数上循环,这样我就可以读取文件n次。但出于某种原因,它在后续循环的开始处只读取一次(我认为在某个地方仍然有一个指针指向最后一行)。我如何让它复位 为了让事情更清楚,如果在下面的文件中有100行,那么最大的val将是100行,即使它应该达到300行 谢谢 FILE* fp = myfopen (inf, "r"); char* line = NULL; size_t len = 0; int num=3 int val=0 for (i=
FILE* fp = myfopen (inf, "r");
char* line = NULL;
size_t len = 0;
int num=3
int val=0
for (i=0;i<num;i++)
{
while (getline (&line, &len, fp) != -1)
{
val++;
}
}
FILE*fp=myfopen(inf,“r”);
char*line=NULL;
尺寸长度=0;
int num=3
int val=0
对于(i=0;i一旦读取超过文件末尾,就必须调用
rewind(fp);
如前所述,您可以使用该功能重新开始,另一个选项当然是将文件的打开/关闭移动到循环中:
FILE* fp; = myfopen (inf, "r");
for (i=0;i<num;i++)
{
fp = myfopen(inf, "r");
while (getline (&line, &len, fp) != -1)
{
val++;
}
fclose(fp);
}
FILE*fp;=myfopen(inf,“r”);
对于(i=0;iOrftell
进行更多的控制…但是倒带
更清晰。反复打开和关闭文件会在内核中造成大量不必要的混乱(即使缓存了大量数据结构,仍然是系统调用)@Michael-没有说这是一个好的解决方案,只是说这是另一个解决方案。根据应用程序的不同,更好的方法可能是读取整个文件,然后根据需要从局部变量处理数据