gpt4 book ai didi

c - 如何使用 %[^\n]s 读取空行?

转载 作者:太空宇宙 更新时间:2023-11-04 05:45:09 25 4
gpt4 key购买 nike

我有一个程序,其中

fscanf(fp,"%[^\n]s",line);

用于读取一行。

如果我放入一个 while 循环,

while(!feof(fp))
fscanf(fp,"%[^\n]s",line);

上面的代码适用于第一行,其余的,我得到

line as NULL. ( line = "" )

我的文件包含很多行甚至很多空行。我怎样才能使上面的代码工作?

最佳答案

首先,转换说明符将是 %[^\n](末尾没有 s)。

其次,您不想在没有明确大小的情况下使用 %[ 转换说明符;否则你将面临缓冲区溢出的风险:

char line[132];
...
fscanf(fp, "%131[^\n]", line);

第三,这将在输入流中留下换行符,可能会扰乱下一次读取。

最后,您不想使用feof 作为您的循环条件,因为在您尝试之后它不会返回真读取过去的 EOF,导致循环执行次数过多。

坦率地说,我认为更好的选择是使用fgets();它将读取所有内容,包括下一个小于指定大小的换行符。 IOW,如果 line 的大小可以容纳 20 个字符并且输入行有 80 个字符(包括换行符),fgets 将读取 19 个字符并将 0 终止符附加到 。如果输入行是 10 个字符,它会将整个输入行读入 line(包括换行符)。

fgets 将在 EOF 或错误时返回 NULL,因此您应该将循环构造为

while (fgets(line, sizeof line, fp))
{
// do something with line
}
if (feof(fp))
// hit end of file
else
// error on read.

关于c - 如何使用 %[^\n]s 读取空行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7756284/

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