[英]Unexpected output on using puts() and printf() function
我正在嘗試在Dev C ++ IDE上運行基本代碼,但是它給出了預期的輸出-
printf("%d", printf("stackoverflow1"));
printf("%d", puts("stackoverflow2"));
puts(printf("stackoverflow3"));
預期輸出應為:
第114章
14堆棧溢出314
但是我得到的輸出是:
第114章
0 stackoverflow3
有人可以解釋輸出中的不一致之處嗎? 我知道puts
返回一個非負數,但為什么我每次都會得到一個“ 0”。 同樣在最后一個語句中,為什么puts不打印由printf
打印的字符數?
printf("%d", printf("stackoverflow1"));
Printf返回一個int(打印多少字符= 14)。 因為必須先評估外部printf的參數,然后才能評估外部printf的字符串,所以打印的字符串將是“ stackoverflow114”
printf("%d", puts("stackoverflow2"));
puts返回“負值”(這是標准給您的唯一保證)。 在您的情況下,非負值為int14。字符串“ stackoverflow2 \\ n”由puts
打印,而14由printf
打印。
puts(printf("stackoverflow3"));
puts
將const char*
作為參數,而printf
返回打印的字符數(再次為14)。 由於puts
需要一個指針,因此它可能會將地址14處的內存解釋為字符串並輸出(它也可能會取消編譯-大多數編譯器都會“高興”並為您強制轉換,並帶有警告)。 該字符串似乎為空(可能是隨機的)。 因此,此行僅打印“ stackoverflow3”(在您的情況下),而外部puts僅打印一個隨機字符串(在您的情況下為“”)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.