读取文件并使用fscanf进入无限循环

时间:2011-04-19 00:57:50

标签: c

这是给出要扫描的文件的函数:

void scan(FILE *file) {

    while (true) {
        char s1[1001];
        int result = fscanf(file, "%10s", s1);
        printf("%d\n", result);
        s1[1001] = '\0';
        if (result == EOF) break;
    }


}

我在将文件传递给此函数之前使用fopen。 它在无限循环中打印出-1,但它不会中断。怎么样?

2 个答案:

答案 0 :(得分:2)

s1中强制使用null终结符时,你有一个off-by-one错误,这个:

s1[1001] = '\0';

超过s1的结尾,应该是:

s1[1000] = '\0';

当您在C中将数组声明为char s1[X];时,X是数组中元素的数量,并且由于C数组从零开始编制索引,因此最后一个元素为s1[X-1]

这个逐个更改可能会在resultprintf支票之间更改result == EOF的值。

答案 1 :(得分:0)

我想这取决于s1是什么。

确保其为char s1[ appropriate_size ]而不是char * s1

它在我的案例中运作良好: Test