c - sscanf 从头开始​​读取

标签 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 调用会再次从头开始读取吗? 这是为什么?如何正确阅读?

最佳答案

你的两行 sscanf 可以重写为:

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

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

改为使用单个 sscanf 调用来提取两个标记:

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

关于c - sscanf 从头开始​​读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445327/

相关文章:

c - 如何控制 gstreamer 管道中的帧速率?

c - 如何用C语言中的一个函数来操作不同大小的矩阵?

c - 我想搜索并显示一个 “contact”的信息,但是没有用

c - 如何从 C 中的文本文件中读取字符串矩阵?

c - C 中 scanf 的奇怪行为

c - C 中的对偶四元数实现

c++ - 使用C时间函数测量时间: are they code-reordering resistant?

arrays - 如何索引汇编中的字符串

c++ - const char*、const char(&)[N] 和 std::string 的函数重载

c - 如何检测 scanf() 末尾的空格或换行符?