从C中的文件中读取字符串

时间:2011-11-14 22:18:40

标签: c string file-io

我有一个包含多个字符串的文件,每个字符串都在一个单独的行上。所有字符串都是32个字符长(所以33个末尾有'\ n')。

我正在尝试阅读所有字符串。现在,我只想阅读它们而不是按如下方式存储它们:

char line[32];
while (!feof(fp)) {
    fgets(line, 32, fp);
}
printf("%s", line);

这打印出零。为什么不起作用?

此外,我试图在每个字符串读取的末尾存储一个空终止符。我将line数组更改为长度33,但如果找到'\n',如何将其替换为\0并将其存储?

3 个答案:

答案 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);
}