我有一个包含多个字符串的文件,每个字符串都在一个单独的行上。所有字符串都是32个字符长(所以33个末尾有'\ n')。
我正在尝试阅读所有字符串。现在,我只想阅读它们而不是按如下方式存储它们:
char line[32];
while (!feof(fp)) {
fgets(line, 32, fp);
}
printf("%s", line);
这打印出零。为什么不起作用?
此外,我试图在每个字符串读取的末尾存储一个空终止符。我将line
数组更改为长度33
,但如果找到'\n'
,如何将其替换为\0
并将其存储?
答案 0 :(得分:4)
您的代码无效,因为您只为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';
答案 1 :(得分:1)
这是一个基本方法:
// create an line array of length 33 (32 characters plus space for the terminating \0)
char line[33];
// read the lines from the file
while (!feof(fp)) {
// put the first 32 characters of the line into 'line'
fgets(line, 32, fp);
// put a '\0' at the end to terminate the string
line[32] = '\0';
// print the result
printf("%s\n", line);
}
答案 2 :(得分:0)
它是这样的:
char str[33]; //Remember the NULL terminator
while(!feof(fp)) {
fgets(str, 33, fp);
printf("%s\n",str);
}