2014-10-09 67 views
0

就像標題所說。我的印象是,字符與short short unsigned int相同,允許0到255之間的任何值。根據Visual Studio上的調試器,每當我聲明char時,它將從-52 'Í'開始。爲什麼會出現這種情況,這怎麼可能?未初始化字符爲什麼以及如何在C中以-52開始?

+0

只要'signed char'可以包含基本執行字符集,'char'可以在執行時自行決定是否簽名或未簽名。沒有像「short short unsigned int」這樣的東西。你不能依賴未初始化的值爲'-52'。 – 2014-10-09 02:40:40

+3

它從垃圾值開始,因爲您尚未初始化它。 – dasblinkenlight 2014-10-09 02:41:11

+1

我意識到,沒有這樣的東西,短的無符號整數;這就是爲什麼我說「會」。 – Smurfton 2014-10-09 03:14:01

回答

3

char是否帶或在你的情況下,未簽名是簽名的,這是不確定的,這是覆蓋在其中說,草案C99標準節6.2.5類型

三種類型Char,符號的字符,和無符號字符統稱爲 ,稱爲字符類型。應定義炭到 執行具有相同的範圍,表示和行爲作爲有符號 char或unsigned char.35)

unintialized自動變量具有不確定的值,因此它們的初始值是不可預測的。

因爲我們正在談論的Visual Studio,它會根據維基百科的文章Magic number (programming)出現它使用CC標記未初始化堆棧內存:

微軟的C++調試運行時庫和許多DOS 環境,以紀念使用未初始化的堆棧內存。 CC類似於x86處理器上的INT 3調試斷點中斷的 操作碼。

這將解釋您看到的-52,但這不應該被認爲是可靠的,不便攜。應該注意的是,使用不確定值會調用未定義的行爲。

3

因爲Visual Studio會在調試模式下將堆棧內存初始化爲0xCC,所以0xCC是int 3(中斷指令)的機器碼,0xCC是十進制的-52。

+0

更多關於這個http://stackoverflow.com /問題/ 370195 /時,和爲什麼,意志的-OS-初始化內存到0XCD-0xdd-等-上自由的新的malloc, – 2014-10-09 03:57:45

相關問題