gpt4 book ai didi

c - fgetc 逐行读取文件

转载 作者:行者123 更新时间:2023-11-30 15:55:33 25 4
gpt4 key购买 nike

所以我正在开发一个函数,该函数将使用 fgetc 将一行读入缓冲区。所以我可以随意使用该缓冲区,然后用下一行重新填充缓冲区。我的函数可以工作,但是我必须在 for 循环之外重复代码才能处理最后一行,如下所示:

for(i = 0, c = 1; ch != EOF; i++)
{
ch = fgetc(grab);
if(ch == 0x0A)
{
/*Process Line*/
c = 1;
}
else
{
linetmp = realloc(line, (c + 1) * sizeof(char));
if(!linetmp)
{
free(line);
free(url);
printf("\nError! Memory allocation failed!");
return 1;
}
line = linetmp;
line[c - 1] = ch;
line[c] = 0x00;
c++;
}
}
/*repeat if(ch == 0x0A) statement*/

我宁愿在同一个循环中完成这一切,但不确定我将如何去做。任何帮助将不胜感激!

最佳答案

我建议您改用<a href="http://linux.die.net/man/3/getline" rel="noreferrer noopener nofollow">getline()</a>如果您使用的是 POSIX 系统。

此外,你的逻辑很奇怪,因为你检查 EOF仅在循环头中,但更新 ch循环内。这意味着它将以 ch == EOF 运行。 ,在重新评估循环条件之前。

您应该尝试将更新和检查放在一起,使循环 header 如下所示:

for(i = 0, c = 1; (ch = fgetc()) != EOF; i++)

此外,您需要考虑行分隔符,即 '\n' (回车)和 '\n' (换行)可能会发生。

关于c - fgetc 逐行读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com