从sscanf中提取数据

extract data from sscanf

本文关键字:数据 提取 sscanf      更新时间:2023-10-16

我想知道为什么sscanf不能正常工作。

我有一个字符串"1,2,3,#",我想提取的数据没有逗号,代码是

int a1,a2,a3;
char s;
string teststr = "1,2,3,#";
sscanf(teststr.c_str(), "%d,%d,%d,%s",&a1,&a2,&a3,&s);
cout << teststr << endl;
cout << a1 << a2 << a3 << s << endl;

预期输出应该是123#,但我得到的实际结果是120#, a3总是0。

如果我展开到4个数字,

int a1,a2,a3,a4;
char s;
string teststr = "1,2,3,4,#";
sscanf(teststr.c_str(), "%d,%d,%d,%d,%s",&a1,&a2,&a3,&a4,&s);
cout << teststr << endl;
cout << a1 << a2 << a3 << a4 << s << endl;

则结果为1230#。看起来最后一个整型总是0。为什么会发生这种情况?如何解决这个问题?

sscanf(teststr.c_str(), "%d,%d,%d,%s",&a1,&a2,&a3,&s);
                                   ^  passing char variable s to %s (specifier for reading single char is %c not %s)

试试-

sscanf(teststr.c_str(), "%d,%d,%d,%c",&a1,&a2,&a3,&s);