我找到这段代码,看看,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 }
~
答案 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()
的调用,只有必需的参数。