预先感谢您的帮助。我在使用 sscanf 扫描 txt 中的某些值时遇到问题,找不到此处已发布的类似内容。这就是我正在阅读的 txt 的样子:
1 NAME 211.505 42.63
2 NAME 335.475 42.63
3 NAME 449.645 42.63
4 NAME 512.435 42.63
这是出现问题的部分:
double contacts[N-1][1];
i = 0;
while(fgets(cLine,100,inFile) != NULL) {
sscanf(cLine,"%d %s %lf %lf",
&cNum[i],
cVarName[i],
&contacts[i][0],
&contacts[i][1]);
i++;
}
它在每一步都工作正常,但似乎在 i 处,sscanf 替换了 i-1 值。
这可能是我没有注意到的愚蠢的事情,如果是这样的话,抱歉。
感谢您的帮助。
最佳答案
contacts
应声明数组:
double contacts[N][2];
因为您将其索引为 contacts[i][1]
;它在第二维中必须至少有 2 个条目。数组声明指定每个维度中所需的条目数,而不是最高元素的索引。我只是猜测你想要 N
第一维中的条目,因为声明 N-1
似乎很奇怪,但正如我之前指出的,循环没有界限,所以很难说。
C 不执行数组边界检查,因此通过将数组声明为第二维中只有 1 个元素,您会发现:
&contacts[i][1] == &contacts[i+1][0]
因此,对于第一次迭代之后的每次迭代,每次存储到 contacts[i][0]
中,您将覆盖contacts[i-1][1]
。最后一次迭代将存储 contacts[i][1]
在contacts[i+1][0]
.
尝试打印元素的地址以查看发生了什么。
关于c - sscanf 替换以前的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21680632/