[英]Why sscanf doesn't work well in this code?
#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-9a-fA-F]
匹配不在字符集中的非空字符序列。 由於字符串的開頭沒有任何非十六進制數,因此此轉換將失敗,並且sscanf
立即返回。
據我所知,沒有辦法在sscanf
將此選項設為可選。 如果只想跳過非十六進制,請使用strcspn()
。
num = strcspn(string, "0123456789abcdefABCDEF");
strcpy(buf, string+num);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.