當我運行下面的代碼(基於Eclipse),我得到一個彈出消息,該.exe文件已經停止工作:當我告訴printf打印一個變量時會發生什麼?
#include <stdio.h>
main()
{
int x;
x = 1;
printf(x);
}
我知道,我在爲了使其運行應遵循它的代碼:
printf("%d", x);
不過,我的問題很簡單這是怎麼回事「中就有」當我編寫它的前路。
當我運行下面的代碼(基於Eclipse),我得到一個彈出消息,該.exe文件已經停止工作:當我告訴printf打印一個變量時會發生什麼?
#include <stdio.h>
main()
{
int x;
x = 1;
printf(x);
}
我知道,我在爲了使其運行應遵循它的代碼:
printf("%d", x);
不過,我的問題很簡單這是怎麼回事「中就有」當我編寫它的前路。
printf()
第一個參數意味着是一個字符串。
在C中,值'1'被壓入堆棧以調用printf。 printf期待一個字符串,所以它開始把1作爲一個地址。
這會導致「停止工作」 - 當它試圖看個字符地址1.
謝謝。在進入地址部分之前,我有一定的路要走,所以我會牢記這一點。 – HeyJude
從技術上講,它不應該編譯,但對於爲什麼它的一些信息,請看這裏:http://stackoverflow.com/questions/8288502/why-can-i-implicitly-convert-an-int-literal- int-in-c-but-in-c – szczurcio
閱讀'printf()'的文檔可能是一個好主意(http://man7.org/linux/man-pages/man3 /sprintf.3.html),然後再使用該功能。 – alk
我正在投票結束這個問題作爲題外話題,因爲再次尋求對已知UB的解釋。 –