为什么sscanf比期望值更多?
示例代码。
int main()
{
char *str="a:b:c:d:g:s:d";
int a[4]={0};
int ret;
ret = sscanf(str,"%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3]); /*It prints 4 but in input I have given 7 values(a,b,c,d,g,s,d)*/
if(ret==4)
{
printf("success\n");// it prints success anyways!
}
return 0
}
我想只有当*str包含4个八位数(a:b:c:d - 只有十六进制值)时才进入if条件。
注意:如果我给的值少于4个八位数,就不会进入if条件。
你的字符串没有给出七个值,因为 "g "和 "s "不是有效的十六进制值。所以先解决这个问题。
char *str="a:b:c:d:e:f:1";
然后尝试读取4个以上的值
ret = sscanf(str,"%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&ret);
现在,如果有四个以上的值,这段代码就会读取其中的五个,然后就会有一个 "g "和 "s"。if
会失败。我重用了 ret
因为返回值的赋值保证会在之后发生。但如果这让你害怕或困惑,你可以这样做。
int dummy;
ret = sscanf(str,"%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&dummy);