使用 sscanf 阅读文本

Read texts using sscanf

我对 sscanf 函数的使用有疑问。

#include  <iostream>
#include  <stdio.h>

int main()
{
    char a[3];
    char b[4];
    const char* p = "aaaaaaaaaaaaaaaaaa bbbbbb";
    sscanf(p, "%2s %3s", a, b);
    std::cout << a << std::endl;
    std::cout << b << std::endl;
    return 0;
}

所需的输出将是: 一个 bbb

实际输出为: 一个 aaa

如果您想跳过 space 之前的所有字符,请使用 %*[^ ]:

sscanf(p, "%2s%*[^ ] %3s", a, b);

% 后的星号告诉 sscanf 忽略输入的相应部分。

这会产生所需的输出 (demo 1)。

why this case is not working?

char a[5];
char b[6];
const char* p = "word word2 , word";
sscanf(p, "%4s%*[^ ] %5s", a, b);

这不起作用,因为 %s%[...] 不能很好地混合。将 %Ns 替换为 %N[^ ]:

sscanf(p, "%4[^ ]%*[ ]%5[^ ]", a, b);

demo 2.