我有一个包含多个字符串的文件,每个字符串在单独的行上。所有字符串均为32个字符长(因此33个结尾处带有'\ n')。
我正在尝试阅读所有字符串。现在,我只想阅读它们,而不是按以下方式存储它们:
char line[32];
while (!feof(fp)) {
fgets(line, 32, fp);
}
printf("%s", line);
打印出零。为什么不起作用?
此外,我正在尝试在读取的每个字符串的末尾存储一个空终止符。我将
line
数组的长度更改为33
,但是如果找到'\n'
,如何将其替换为\0
并存储呢? 最佳答案
您的代码无法正常工作,因为您只为30个字符加上换行符和空终止符的行分配了空间,并且因为在feof()
返回true之后只打印了一行。
此外,仅当您尝试并且无法读取文件末尾之后,feof()
才返回true。这意味着while (!feof(fp))
通常是不正确的-您应该只读取直到读取功能失败为止-此时,您可以使用feof()
/ ferror()
区分文件结尾错误和其他类型的错误(如果需要)至)。因此,您的代码可能看起来像:
char line[34];
while (fgets(line, 34, fp) != NULL) {
printf("%s", line);
}
如果希望在
'\n'
中找到第一个line
字符并将其替换为'\0'
,则可以使用strchr()
中的<string.h>
:char *p;
p = strchr(line, '\n');
if (p != NULL)
*p = '\0';