2014-09-25 37 views
-2

我在我的linux系統上運行了以下測試。爲什麼printf失敗的空字符串?

試驗1:

printf("test %s\n", NULL); 
printf("test %s\n", NULL); 

打印:

test (null) 
test (null) 

試驗2:

printf("%s\n", NULL); 
printf("%s\n", NULL); 

打印

Segmentation fault (core dumped) 

上述測試有什麼區別?爲什麼在上面的測試1中不會引發分段錯誤?

我無法理解爲什麼在第二次測試中打印失敗?

+1

它是未定義的行爲,您不能保證看到一致的結果。 – 2014-09-25 22:53:55

回答

2

在編譯器中啓用警告。你不打印你的想法。

我的編譯器會很高興地告訴你,(在這兩種情況下):

warning: reading through null pointer (argument 2) [-Wformat] 
warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘void *’ [-Wformat] 

由於紅色警戒說,ALERT!你做什麼,是不確定的行爲。

此外,請務必檢查鏈接的answer以獲得更詳細的答案,它與我的距離不遠。

+0

@卡迪娜,我看到你有-2,而我發佈的鏈接答案有+8。我認爲這是因爲,已經有一個答案,但你沒有找到。我會爲你+1平衡,但要確保你下次更好地搜索。 :) – gsamaras 2014-09-25 23:02:02

+0

謝謝薩馬拉斯。 – kadina 2014-09-25 23:03:58

相關問題