我找到了这段代码,看,printf 只有一个参数。而且,它有效!我只知道 printf 是 printf("format",...); 但为什么这段代码有效?任何答案都会有所帮助。谢谢。
1 #include <stdio.h>
2
3 int main()
4 {
5 char a[]= "hello world";
6 printf(a);
7 return 0;
8 }
~
a是格式。但是,这种用法非常危险,因为很多人忘记了这a是一种格式,而是认为它是文字字符串。不同之处在于,如果a碰巧包含%,它将被解释为格式说明符,但您没有参数可用于说明符。
使用 打印单个消息字符串时printf,您应该始终这样做:
printf("%s", a);
或者puts在适当的时候使用。
int printf ( const char * format, ... );
是一个带有必需参数的函数,format以及一个可以是列表或零个或多个元素的列表参数,由 表示...。
因此,printf(a);只需调用printf()所需的参数即可。
a被视为不包含格式说明符的格式字符串。
通常,printf()将扫描格式字符串,打印任何不是格式说明符的内容。当它遇到一个说明符时,它会对其进行解码,然后从变量参数列表中获取一个参数,根据说明符对其进行格式化,然后输出,然后像这样在循环中继续,直到到达字符串的末尾。
由于a不包含格式说明符,printf()因此不从变量参数列表中获取任何参数。
一般来说,printf()不应该用这种方式打印任意字符串。如果程序只打印一个字符串,你可以使用fputs():
fputs(a, stdout);
printf是一个具有可变参数列表的函数。第一个参数是一个字符串,它被解析以查找格式详细信息。在您给出的示例中,没有格式详细信息(以 开头的字段%)。因此,不再需要打印参数并且代码有效。