簡體   English   中英

使用puts()和printf()函數時出現意外輸出

[英]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打印的字符數?

  • 正如您提到的,puts()成功時只需返回一個非負數。 這意味着您使用的編譯器可以決定返回什么,只要它遵循此操作即可。 您的編譯器似乎選擇了0。
  • 如2501所述,將puts(const char * p)傳遞給int是非法的,您的編譯器應該對此有所抱怨。 puts()應該從p開始打印,直到到達'\\ 0'char,因此輸入必須是指向'\\ 0'終止字符串的指針

您有未定義的行為。 puts()接受const char*參數,但您將其傳遞給int

puts(printf("stackoverflow3"));

在編譯器上啟用警告,您的代碼甚至無法編譯。

printf("%d", printf("stackoverflow1"));

Printf返回一個int(打印多少字符= 14)。 因為必須先評估外部printf的參數,然后才能評估外部printf的字符串,所以打印的字符串將是“ stackoverflow114”

printf("%d", puts("stackoverflow2"));

puts返回“負值”(這是標准給您的唯一保證)。 在您的情況下,非負值為int14。字符串“ stackoverflow2 \\ n”由puts打印,而14由printf打印。

puts(printf("stackoverflow3"));

putsconst char*作為參數,而printf返回打印的字符數(再次為14)。 由於puts需要一個指針,因此它可能會將地址14處的內存解釋為字符串並輸出(它也可能會取消編譯-大多數編譯器都會“高興”並為您強制轉換,並帶有警告)。 該字符串似乎為空(可能是隨機的)。 因此,此行僅打印“ stackoverflow3”(在您的情況下),而外部puts僅打印一個隨機字符串(在您的情況下為“”)。

暫無
暫無

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

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