scanf诀窍得到解析正确

问题描述:

我解析配置文件中的一行。它有以下格式:scanf诀窍得到解析正确

[email protected] 

我正在使用sscanf进行解析。

rcScanf = sscanf(paramPosition , "%d%2s", &(item->position) , positionFormat); 

这工作,因为我可以检查是否scanf能够使2场比赛,我可以检查strcmp位置格式,如果为“PX”我很期待。问题是我想scanf得到完全“px”,而不是“pxxxxx”或其他东西。格式化字符串中有什么技巧(如果有的话)能够实现这个功能?

谢谢。

+0

确保'positionFormat'被扫描输入后终止用''\ 0''。 – 2014-12-05 13:09:57

+0

在做任何事之前,我都会做一个memset。但谢谢你的提示。 – 2014-12-05 13:54:28

使用%N:

int b=0,e=0,r,p; 

r = sscanf("[email protected]", "%d%[email protected]%n", &p, &b, &e); 

if(r==1 && e-b==3) 
    puts("success"); 
+0

我没有这样测试。如果参数行继续,它会工作吗?实际的格式就像我发送的例子的一个数组。像这样:100px @ white; 200px @ black; 500px @ gray – 2014-12-05 13:53:27

+0

将整个字符串拆分为';'与例如。 strsep,您可以使用上述解决方案 – user411313 2014-12-05 14:02:35

+0

注意:'r'不是必需的,但看起来不错。可以简化为'if(e-b == 3)'。 – chux 2014-12-05 21:09:19

"%n"使用

int n = 0; 
sscanf(paramPosition, "%dpx%n", &(item->position), &n); 
if (n && paramPosition[n] == '@') Success();