sscanf从头开始阅读

时间:2012-11-18 22:34:13

标签: c string scanf

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电话会从头开始重读吗? 这是为什么?如何正确阅读?

1 个答案:

答案 0 :(得分:4)

您的两条sscanf行可以改写为:

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

现在应该很明显为什么ij都有值1sscanf无法修改data点的位置。

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

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