0
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;
}

如果你运行代码你会看到这个

i=1, j=1

为什么j=1在这里?不应该2吗?我错过了一些非常基本的东西吗?

如果我使用sscanf(data, "%d\n%d", &i, &j);它会显示正确的输出。但是现在下一个 sscanf 调用会重新从头开始读取吗?为什么是这样?如何正确阅读?

4

1 回答 1

4

您的两sscanf行可以重写为:

sscanf("1\n2\n", "%d", &i);
sscanf("1\n2\n", "%d", &j);

现在应该很明显为什么两者都有ij具有价值1sscanf无法修改 wheredata点。

使用单个sscanf调用来提取两个令牌:

sscanf(data, "%d\n%d", &i, &j);
于 2012-11-18T22:36:32.193 回答