2015-11-15 119 views
-3

當我運行下面的代碼(基於Eclipse),我得到一個彈出消息,該.exe文件已經停止工作:當我告訴printf打印一個變量時會發生什麼?

#include <stdio.h> 

    main() 
    { 
     int x; 
     x = 1; 

     printf(x); 
    } 

我知道,我在爲了使其運行應遵循它的代碼:

printf("%d", x); 

不過,我的問題很簡單這是怎麼回事「中就有」當我編寫它的前路。

+0

從技術上講,它不應該編譯,但對於爲什麼它的一些信息,請看這裏:http://stackoverflow.com/questions/8288502/why-can-i-implicitly-convert-an-int-literal- int-in-c-but-in-c – szczurcio

+2

閱讀'printf()'的文檔可能是一個好主意(http://man7.org/linux/man-pages/man3 /sprintf.3.html),然後再使用該功能。 – alk

+1

我正在投票結束這個問題作爲題外話題,因爲再次尋求對已知UB的解釋。 –

回答

2

printf()第一個參數意味着是一個字符串。

在C中,值'1'被壓入堆棧以調用printf。 printf期待一個字符串,所以它開始把1作爲一個地址。

這會導致「停止工作」 - 當它試圖看個字符地址1.

+0

謝謝。在進入地址部分之前,我有一定的路要走,所以我會牢記這一點。 – HeyJude

2

你的代碼告訴printf在內存地址1打印字符串。

你可能無法訪問它,所以它崩潰。

+0

謝謝。在進入地址部分之前,我有一定的路要走,所以我會牢記這一點。 – HeyJude

相關問題