为什么sscanf在这段代码中效果不好?

时间:2015-12-24 11:00:38

标签: c scanf

#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似乎立即返回。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

%*[^0-9a-fA-F]匹配字符集中不包含的非空字符序列。由于您在字符串的开头没有任何非十六进制数,因此此转换失败,sscanf会立即返回。

据我所知,sscanf无法使此选项成为可选项。如果您只想跳过非hexdigits,请使用strcspn()

num = strcspn(string, "0123456789abcdefABCDEF");
strcpy(buf, string+num);