2014-02-27 30 views
0

我怎么能sscanf的以下字符串如何sscanf的这个字符串

空(1)

空(20)

我尝试以下,但始终未能

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

谢谢提前!

+0

empty(1)and empty(20)?这是什么 – tesseract

+0

这是他想sscanf的字符串。 –

回答

2

变化

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

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

你的测试字符串是空的(1),但在sscanf的ü用sscanf(buf, "%*s(%d)", &count)

通过这种方式你企图复制“空”来算,这将始终会失败,因为你不能指定字符串为int。

做这样的事情,

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

你必须先为s分配内存 – Laurijssen

+4

不是,%s将被忽略每个sscanf手册 – BobAlmond

+0

@BobAlmond - 我会一直指这个网站http://www.tutorialspoint.com/c_standard_library/c_function_sscanf.htm 并没有这样的定义。我想你的理解错误.. – arunb2w

0

如果文本将永远是 “空(一些诠释)”,然后

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

sscanf()将匹配char for char(空白处理方式不同),直到达到"%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();