使用fgets从文件读取

时间:2012-02-24 16:20:00

标签: c fgets file-read

我正在阅读格式文件

1 32 43 23
32 43
123 43 54 243 
123 2222
2

这是我的代码段。

string[100];
while(!feof(fp))
    fgets(string,100,fp)

现在,当我把每一个字符串放在最后一个字符串中时,我会重复一些,而且会出现更多含糊之处(就像其他东西也会被打印出来,说123左右)。

如何解决这个问题?

2 个答案:

答案 0 :(得分:21)

您需要检查fgets的返回值。如果读取成功,fgets将返回指向您传递给它的缓冲区的指针(例如,在您的示例中为string)。如果遇到文件结尾且未读取任何字符,fgets将返回NULL

试试这个:

char string[100];
while(fgets(string, 100, fp)) {
    printf("%s\n", string);
}

答案 1 :(得分:6)

在尝试从最后的文件中读取后,才会发送eof。您必须使用fgets的返回值(在eof或错误上返回NULL,否则返回指针):

char string[100];
while(fgets(string, 100, fp))
    // do stuff with string

像这样检查返回值将导致你永远不会像在另一个环境中那样在循环体内点击eof,而不是在条件中。