sscanf函数中%* s的含义是什么?

时间:2015-12-17 14:41:58

标签: c scanf

C编程新手,随时纠正我。

int main()
{
    char sent[]="mugiwara is 18 years old";
    char str[20];
    int i;
    sscanf(sent,"%s%*s%d",str,&i);
    printf("\n%s->%d",str,i);

    return 0;
}

在上面的c程序中,世界%*ssscanf语句中做了什么?我尝试删除它,然后当我尝试运行程序时出现垃圾值,请善解释。

2 个答案:

答案 0 :(得分:4)

%*s中的

sscanf将从流中读取数据,然后将其丢弃。它不会将读取数据存储到任何变量中,因此,不需要在sscanf中为该sepcifier传递任何参数。

For reference - sscanf

  

(可选)赋值抑制字符*。如果存在此选项,则该函数不会将转换结果分配给任何接收参数。

答案 1 :(得分:0)

  

“我尝试删除它,然后当我尝试运行程序时出现垃圾值。”

C提供了许多函数的返回值,良好的代码使用这些函数来防止此类问题。 doesNotUnderstand:返回成功保存的值(或EOF)的计数。如果不是2,则未成功扫描sscanf()

i

// sscanf(sent,"%s%*s%d",str,&i); if (sscanf(sent,"%s%*s%d",str,&i) == 2) { printf("\n%s->%d",str,i); } else { printf("\nFailed to scan <%s>\n",sent); } 指示"%s" 1)消耗而不保存空白。 2)消耗并保存非空格字符,直到3)检测到空白区域,EOF或输入错误。

sscanf()执行相同操作,但步骤2中未保存任何数据。此外:此指令的成功或失败不会导致返回值。