int main(){
int i,j;
char *data = "1\n2\n";
sscanf(data, "%d", &i);
sscanf(data, "%d", &j);
printf("i=%d, j=%d\n", i, j);
return 0;
}
如果你run the code你会看到这个
i=1, j=1
为什么 j=1
在这里?不应该是 2
吗?我错过了一些非常基本的东西吗?
如果我使用 sscanf(data, "%d\n%d", &i, &j);
它会显示正确的输出。但是现在下一个 sscanf 调用会再次从头开始读取吗? 这是为什么?如何正确阅读?
最佳答案
你的两行 sscanf
可以重写为:
sscanf("1\n2\n", "%d", &i);
sscanf("1\n2\n", "%d", &j);
现在应该很明显为什么 i
和 j
都具有值 1
。 sscanf
无法修改 data
指向的位置。
改为使用单个 sscanf
调用来提取两个标记:
sscanf(data, "%d\n%d", &i, &j);
关于c - sscanf 从头开始读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445327/