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