sscanf的用法,我们首先要知道此接口的实现。
sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。
返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。 返回0表示失败 否则,表示正确格式化数据的个数 例如:sscanf(str,"%d%d%s", &i,&i2, &s); 如果三个变成都读入成功会返回3。 如果只读入了第一个整数到i则会返回1。证明无法从str读入第二个整数。
typedef struct{
char a;
char b;
}param;
char property[10];
property_get(FLY_SET_CURCLEARKEY,property,"255");
sscanf(property,"%d", ¶m->b);
property_get(FLY_SET_CURCLEARKEY,property,"25");
sscanf(property,"%d", ¶m->a);
结果:a=25,b=0;
原因:b被清空了,系统给予0值。
改为:
property_get(FLY_SET_CURCLEARKEY,property,"255");
sscanf(property,"%hhd", ¶m->b);
property_get(FLY_SET_CURCLEARKEY,property,"25");
sscanf(property,"%hhd", ¶m->a);
%hhd 取一个字节地址,%d取4个字节地址。
扩展:
1. 常见用法。
charstr[512]={0};
sscanf("123456","%s",str);
printf("str=%s",str);
2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456","%4s",str);
printf("str=%s",str);
3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456abcdedf","%[^]",str);
printf("str=%s",str);
4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF","%[1-9a-z]",str);
printf("str=%s",str);
5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF","%[^A-Z]",str);
printf("str=%s",str);