使用sscanf阅读文本

Var*_*yan 0 c c++ scanf

我对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;
}
Run Code Online (Sandbox Code Playgroud)

期望的输出是:aa bbb

实际输出是:aa aaa

das*_*ght 5

如果您想跳过一个空格的所有字符,请使用%*[^ ]:

sscanf(p, "%2s%*[^ ] %3s", a, b);
Run Code Online (Sandbox Code Playgroud)

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

这产生了所需的输出(演示1).

为什么这个案子不起作用?

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

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

sscanf(p, "%4[^ ]%*[ ]%5[^ ]", a, b);
Run Code Online (Sandbox Code Playgroud)

演示2.