#include <stdio.h>
int main()
{
char string[80]="abcdef";
char buffer[80];
int num;
sscanf(string,"%*[^0-9a-fA-F]%n%s",&num,buffer);
printf("%d\n",num);
puts(buffer);
return 0;
}
输出:
-149278720
我期待的是
0
abcdef
我相信正则表达式%*[^0-9a-fA-F]
会丢弃"xdigits"
以外的所有字符,但是,当字符串中的第一个字符为"xdigit"
时,sscanf
似乎立即返回。
我该如何解决这个问题?
答案 0 :(得分:2)
%*[^0-9a-fA-F]
匹配字符集中不包含的非空字符序列。由于您在字符串的开头没有任何非十六进制数,因此此转换失败,sscanf
会立即返回。
据我所知,sscanf
无法使此选项成为可选项。如果您只想跳过非hexdigits,请使用strcspn()
。
num = strcspn(string, "0123456789abcdefABCDEF");
strcpy(buf, string+num);