为什么sscanf不';在这个代码中不能很好地工作?

为什么sscanf不';在这个代码中不能很好地工作?,c,scanf,C,Scanf,我所期望的是 -149278720 我相信regex%*[^0-9a-fA-F]会丢弃除“xdigit”以外的所有字符,但是,当字符串中的第一个字符是“xdigit”时,sscanf似乎会立即返回 如何修复此问题?%*[^0-9a-fA-F]匹配不在字符集中的非空字符序列。由于字符串开头没有任何非十六进制数字,因此转换失败,sscanf立即返回 据我所知,在sscanf中无法将此选项设置为可选。如果只想跳过非十六进制数字,请使用strcspn() 为什么不检查sscanf()的返回值呢?Sta

我所期望的是

-149278720
我相信regex
%*[^0-9a-fA-F]
会丢弃除
“xdigit”
以外的所有字符,但是,当字符串中的第一个字符是
“xdigit”
时,
sscanf
似乎会立即返回


如何修复此问题?

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

据我所知,在
sscanf
中无法将此选项设置为可选。如果只想跳过非十六进制数字,请使用
strcspn()


为什么不检查
sscanf()
的返回值呢?Stackoverflow应该自动拒绝所有带有未检查扫描返回值的帖子。@Jens:)说得好,先生。@Jens,但我使用了%n@Jensn没有任何期望;相反,到目前为止从输入消耗的字符数通过下一个指针存储,该指针必须是指向int的指针。这不是转换,尽管可以使用*赋值抑制字符抑制。C标准规定:“执行%n指令不会增加执行完成时返回的赋值计数”,但勘误表似乎与此相矛盾。可能明智的做法是不要对%n转换对返回值的影响进行任何假设。从…起
-149278720
0
abcdef
num = strcspn(string, "0123456789abcdefABCDEF");
strcpy(buf, string+num);