[英]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.