[英]Strange output from nested printf statemenets
好的,我在玩一些代码,试图理解一些技巧以及它是如何工作的,所以我不理解该代码的输出
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的“ return”值= 3个打印字符。
int i = 8;
printf("%d", printf("%o", i));
printf
返回其打印的字符数量,对于之前的10
字符,该数量为2。 评估顺序意味着您将获得102
作为输出。 或者更确切地说是10
,然后是2
,中间没有换行符或空格。
在第二个示例中,从printf
返回的结果是10
(注意空格),然后是3
( 10
是3个字符, {'1','0',' '}
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.