如何sscanf这个字符串

时间:2014-02-27 11:07:27

标签: c scanf

我怎样才能解析以下字符串

空(1)

空(20)

我尝试了以下但总是失败

int count;
sscanf(buf, "%*s(%d)", &count)

提前致谢!

3 个答案:

答案 0 :(得分:2)

更改为

sscanf(buf, "%*[^(](%d", &count);

答案 1 :(得分:0)

sscanf总是以你给出的格式阅读。

您的测试字符串为空(1)但在sscanf中使用了sscanf(buf, "%*s(%d)", &count)

通过这种方式,你试图将“empty”复制到count,这将永远失败,因为你不能将字符串赋值给int。

做类似的事情,

int count;
char s[20];
sscanf(buf, "%*s(%d)",s, &count)

答案 2 :(得分:0)

如果文本总是“空(某些int )”,那么

int count;
int n=0;
if (sscanf(buf, "empty(%d)%n", &count, &n) == 1) && (n > 0)) Success();

sscanf()会将charchar匹配(虽然白方处理方式不同),直到达到"%d",然后它会尝试匹配int 。继续扫描,将charchar匹配,直到"%n"将扫描的char计数保存到n

测试返回值对1(扫描的1个参数,%n args没有贡献)并且看到n不再为0,扫描已知完全完成。

如果需要代码以确保没有额外,则可以使用

if (sscanf(buf, "empty(%d)%n", &count, &n) == 1) && (buf[n] == '\0')) Success();