2014-09-25 60 views
-2

我跑在C下面的代碼段:C中輸出什麼?

printf("%%%\n"); 

我得到的輸出 「%」(不帶引號)。任何人都可以解釋發生了什麼? 爲什麼我們只有一個%登錄結果?

+0

相關:http://stackoverflow.com/questions/1860159/how-to-escape-the-sign-in-cs-printf – dragosht 2014-09-25 09:18:19

+0

閱讀[printf的(3) ](http://man7.org/linux/man-pages/man3/printf.3.html)WIKIPAGE上[未定義行爲](http://en.wikipedia.org/wiki/Undefined_behavior) – 2014-09-25 09:18:46

+0

事實上,我得到了兩個'%%'符號 – 2014-09-25 09:18:53

回答

4

%%將打印%%\n不是有效的conversion specifier

你應該總是啓用警告。請參閱以下內容:

warning: unknown conversion type character 0xa in format [-Wformat=] 
    printf("%\n"); 
       ^

正如在評論中指出,這是undefined behavior因爲根據C11 standard,它是,如果不確定的行爲:

—無效轉換規範的格式發現一個格式化的輸入/ ouptut功能[...]

+0

爲什麼我有兩個'%%'作爲輸出? – 2014-09-25 09:25:56

+0

@rakib因爲%\ n不是有效的格式說明符。因爲您應該始終啓用警告。 – 2014-09-25 09:27:59

+0

我跑使用GNU GCC編譯上Codeblocks13.12代碼,和它給了只有一個%符號與沒有警告.. 我甚至跑了 的printf(「%\ n」); 但它也沒有給出任何警告.. 我想警告我的電腦啓用(怎麼我得到了在不同的問題一些警告)..你能解釋一下爲什麼會出現這種情況? – 2014-09-25 09:28:46