好吧,我正在玩一些代码,尝试了解一些技巧以及它是如何工作的,所以我不明白这段代码的输出
int i = 8;
printf("%d", printf("%o", i));
结果这是102,我不知道怎么样,我知道八进制中的8是10,但最让我困惑的是当我把这样的空间放在%o这之后
printf("%d", printf("%o ", i));
现在,结果是10 3,这里发生了什么?
外部printf()将打印内部的返回值printf().
引用C11,章节§7.21.6.1,
该
fprintf函数返回传输的字符数,如果发生输出或编码错误,则返回负值.
所以,在第一种情况下,
 printf("%d", printf("%o", i));
内部printf()打印10,即两个字符,这是调用的返回值和外部printf()打印.两个相邻打印语句的输出显示为102.
同样,当在内侧的格式说明后放的空间printf(),将打印(和返回)3,所以之后的10 <space>,3被打印.
Printf打印到标准输出,并返回int,打印字符的数量.所以你得到:
10 3
这是:
10是评估的内部printf,其打印八进制8.
3,评估的外部printf打印内部printf = 3个打印字符的"返回"值.