Printf的Param

时间:2013-08-03 01:45:53

标签: c printf param

我找到这段代码,看看,printf只有一个param.And,它有效!我对printf的所有知识都是printf(“format”,...);但为什么这段代码有用?任何答案都会有帮助。谢谢。

  1 #include <stdio.h>
  2 
  3 int main()
  4 {
  5         char a[]= "hello world";
  6         printf(a);
  7         return 0;
  8 }
~           

4 个答案:

答案 0 :(得分:2)

a是格式。但是,这种用法非常危险,因为很多人忘记了a是一种格式,而是认为它是一个文字字符串。不同之处在于,如果a碰巧包含%,它将被解释为格式说明符,但您没有参数说明符。

使用printf打印单个消息字符串时,应始终执行以下操作:

printf("%s", a);

或者只在适当时使用puts

答案 1 :(得分:0)

a被视为不包含格式说明符的格式字符串。

通常,printf()将扫描格式字符串,打印任何不是格式说明符的内容。当它遇到一个说明符时,它会对它进行解码,然后从变量参数列表中获取一个参数,根据说明符对其进行格式化,然后输出,然后在循环中继续这样,直到它到达字符串的末尾。

由于a不包含格式说明符,printf()不从变量参数列表中获取任何参数。

一般来说,printf()不应该用这种方式打印任意字符串。如果程序只打印字符串,则可以改为使用fputs()

fputs(a, stdout);

答案 2 :(得分:0)

printf是一个带有变量参数列表的函数。第一个参数是一个解析用于查找格式详细信息的字符串。在您给出的示例中,没有格式详细信息(以%开头的字段)。因此,没有更多的参数可以打印,代码可以工作。

答案 3 :(得分:0)

int printf ( const char * format, ... );

具有必需参数的函数format和列表参数可以是列表,也可以是零个或多个元素,由...表示。

因此,printf(a);只是对printf()的调用,只有必需的参数。