簡體   English   中英

為什么 sscanf 在 C 中的值超過預期值?

[英]Why sscanf is taking more than desired value in C?

為什么 sscanf 的值超過了預期值?

示例代碼:

int main()
{
    char *str="a:b:c:d:g:s:d";
    int a[4]={0};
    int ret;
    ret = sscanf(str,"%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3]); /*It prints 4 but in input I have given 7 values(a,b,c,d,g,s,d)*/
    if(ret==4)
    {
        printf("success\n");// it prints success anyways!
    }
    return 0
}

僅當 *str 包含 4 個八位字節(a:b:c:d - 僅十六進制值)時,我才想在 if 條件內使用 go。

注意:如果我給出少於 4 個八位字節,它就不會進入 if 條件。

您的字符串沒有給出七個值,因為“g”和“s”不是有效的十六進制值。 所以先解決這個問題:

char *str="a:b:c:d:e:f:1";

然后嘗試讀取四個以上的值:

ret = sscanf(str,"%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&ret);

現在,如果有四個以上的值,此代碼將讀取其中的五個,並且if將失敗。 我重新使用了ret因為返回值的分配保證在之后發生。 但是,如果這讓您感到害怕或困惑,您可以這樣做:

int dummy;
ret = sscanf(str,"%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&dummy);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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