1

我找到了这段代码,看,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 }
~           
4

4 回答 4

2

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

使用 打印单个消息字符串时printf,您应该始终这样做:

printf("%s", a);

或者puts在适当的时候使用。

于 2013-08-03T01:48:27.640 回答
0

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

是一个带有必需参数的函数,format以及一个可以是列表或零个或多个元素的列表参数,由 表示...

因此,printf(a);只需调用printf()所需的参数即可。

于 2013-08-03T05:12:24.520 回答
0

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

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

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

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

fputs(a, stdout);
于 2013-08-03T01:47:38.507 回答
0

printf是一个具有可变参数列表的函数。第一个参数是一个字符串,它被解析以查找格式详细信息。在您给出的示例中,没有格式详细信息(以 开头的字段%)。因此,不再需要打印参数并且代码有效。

于 2013-08-03T01:50:27.797 回答