我有一个C程序在进入while循环时遇到错误。
我初始化一个变量(fragmentcount)并使用fscanf写入它并为其赋值4(这可行)
int fragmentCount;
if ((fscanf(fp, "%i", &fragmentCount)) == 1) {
...
}
但是,当我尝试在下面的while循环中访问它时,fragmentCount = 0
while ((fscanf(fp, "%[#]", discards)) != EOF) {
printf(fragmentCount); // <- pseudocode
}
对于一个简短的实验,我尝试将fscanf作为while循环的条件测试,并且fragmentCount是正确的值(4)。
为什么会这样?我怎么能避免这个?
答案 0 :(得分:1)
discards
如何宣布? fscanf可能正在读取的数据多于discards
有空间的数据,这可能会覆盖其他变量的值。
使用没有字段宽度的'%['格式是一个坏主意 - 它leaves your program open to buffer overflow errors。
答案 1 :(得分:0)
fscanf
从文件中读取值并根据格式字符串对其进行解释。根据{{3}},'%i'格式字符串未知(也许您的意思是'%d'?),因此您不太可能读取您期望的值。
除文件FILE*
和格式字符串外,fscanf
的所有参数都是out参数,这意味着在调用fscanf
之前它们包含的值无关且可以替换。