我有一个包含多个字符串的文件,每个字符串在单独的行上。所有字符串均为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';

10-01 20:21
查看更多