为什么这个C代码1的输出?

时间:2017-03-09 12:25:50

标签: c

无论输入什么字符串,为什么输出始终为1。 请解释

int  main() {
    char ch[]={};
    printf("%d", scanf("%s", ch));
   return 0;
}

2 个答案:

答案 0 :(得分:3)

scanf的手册页:

  

这些函数返回成功匹配的输入项数   并指定,可以少于提供,甚至为零   早期匹配失败的事件。

     

如果在任何一个输入结束之前到达输入结束,则返回值EOF   第一次成功转换或匹配失败。 EOF是   如果发生读错误也会返回,在这种情况下会出错   设置流的指示符(请参阅ferror(3)),并设置errno   表明错误。

因此,这意味着scanf()会返回成功阅读的项目数。

此外,C不允许零大小的数组。

C11 6.7.6.2数组声明符:

第1段:

  

除了可选的类型限定符和关键字static之外,[   和]可以划定表达式或*。如果他们划定表达式   (指定数组的大小),表达式应具有   整数类型。 如果表达式是常量表达式,它应该是   值大于零。元素类型不得为   不完整或函数类型。可选的类型限定符和   关键字static只出现在函数的声明中   具有数组类型的参数,然后仅在最外面的数组中   类型推导。

答案 1 :(得分:3)

因为scanf返回它读取的项目数。在您的情况下,它正在读取一个字符串,因此它返回1,然后通过printf打印到标准输出。