使用 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);
我对 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);