检查 sscanf 调用的返回值,因为文档离子状态将返回一个整数值。
int sscanf( const char *buffer, const char *format, ... ); (C99)
我在我的机器中尝试了与您的查询类似的一小段代码,并且确实 sscanf 为不成功的操作返回负值。
测试代码:
#include <stdio.h>
void main(void)
{
char* foo = " blah bleee bleckk ";
//char* foo = " blah";
int bar = 0;
int ret = -10;
printf("#m1 foo:%s\n",foo);
printf("#m1 bar:%d\n",bar);
printf("#m1 ret:%d\n\n",ret);
ret = sscanf(foo, "%*s%n", &bar);
foo += bar;
printf("#m2 foo:%s\n",foo);
printf("#m2 bar:%d\n",bar);
printf("#m2 ret:%d\n\n",ret);
if(bar > 0)
{
ret = -10;
ret = sscanf(foo, "%*s%n", &bar);
foo += bar;
}
printf("#m3 foo:%s\n",foo);
printf("#m3 bar:%d\n",bar);
printf("#m3 ret:%d\n",ret);
}
两种情况的测试输出:
./a.out
#m1 foo: blah bleee bleckk
#m1 bar:0
#m1 ret:-10
#m2 foo: bleee bleckk
#m2 bar:6
#m2 ret:0
#m3 foo: bleckk
#m3 bar:7
#m3 ret:0
./a.out
#m1 foo: blah
#m1 bar:0
#m1 ret:-10
#m2 foo:
#m2 bar:6
#m2 ret:0
#m3 foo:oo:%s
#m3 bar:6
#m3 ret:-1
问题是对于失败的 sscanf 调用,bar 值未设置为零。