簡體   English   中英

嵌套printf狀態菜單的奇怪輸出

[英]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 (注意空格),然后是310是3個字符, {'1','0',' '} )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM