这是给出要扫描的文件的函数:
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,但它不会中断。怎么样?
答案 0 :(得分:2)
在s1
中强制使用null终结符时,你有一个off-by-one错误,这个:
s1[1001] = '\0';
超过s1
的结尾,应该是:
s1[1000] = '\0';
当您在C中将数组声明为char s1[X];
时,X
是数组中元素的数量,并且由于C数组从零开始编制索引,因此最后一个元素为s1[X-1]
这个逐个更改可能会在result
和printf
支票之间更改result == EOF
的值。
答案 1 :(得分:0)
我想这取决于s1
是什么。
确保其为char s1[ appropriate_size ]
而不是char * s1
。
它在我的案例中运作良好: