[英]Reading a FILE and using fscanf goes into an infinite loop
這是給出要掃描的文件的函數:
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,但它不會中斷。 怎么會?
在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
檢查。
我想這取決於什么是s1
。
確保它是char s1[ appropriate_size ]
而不是char * s1
。
它在我的案例中工作得很好:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.