嵌套调用printf

时间:2018-04-13 02:35:26

标签: c printf

#include <stdio.h>
void main()
{
   printf("%d", printf("%d",printf("Hello world!\n")));
}

为什么输出为132?你好世界是13个单位。

2 个答案:

答案 0 :(得分:4)

如果将陈述分成几个陈述,您可能会更清楚地看到发生的事情:

int temp1 = printf("Hello world!\n");
int temp2 = printf("%d", temp1);
printf("%d", temp2);

第一个printf打印Hello world!\n。由于这是13个字符,因此返回13

第二个printf打印13。由于这是2个字符,因此返回2

第三个printf打印2

所以完整输出将是:

Hello world!
132

如果您添加更多换行符,那将会更加明显:

printf("%d\n", printf("%d\n",printf("Hello world!\n")));

会打印:

Hello world!
13
3

答案 1 :(得分:2)

打开man 3 printf并检查它返回的内容

  

成功返回后,这些函数返回的数量   打印的字符(不包括空格          用于结束输出到字符串的字节。)

在您的情况下printf("Hello world!\n")第一次打印Hello world!,然后返回“13的可打印字符”,并再次打印2 13 2 { {1}} char。