簡體   English   中英

為什么sscanf在此代碼中無法正常工作?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM