簡單說明
出現「燙」的原因是由於字元陣列中的某些陣列元素沒賦值。
具體原因可以通過如下例項來進行說明:
char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
a[3] = 'd';
printf("%s", a); // 輸出結果就會出現很多「燙」,因為只對陣列a中前四個元素進行了賦值,後面的元素未進行賦值,所以計算機預設就輸出「燙」
如果作如下修改就會正常輸出
char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
a[3] = 'd';
a[4] = '\0';
printf("%s", a); // 輸出abcd,因為加了結束字元'\0',而c語言中輸出字串是以結束字元'\0'作為結束輸出的,所以只輸出'\0'前面的所以字元,即abcd
深入分析
這種亂碼最常見的地方是visual studio裡。visual studio中,未初始化的棧空間用0xcc填充,而未初始化的堆空間用0xcd填充。而0xcccc和0xcdcd在中文gb2312編碼中分別對應「燙」字和「屯」字。如果乙個字串沒有結束符』\0』,輸出時就會列印出未初始化的棧或堆空間的內容
目的
這樣做的好處是這些值都很大,作為指標是不可能的(而且 32 位系統中指標很少是奇數值,在有些系統中奇數的指標會產生執行時錯誤),作為數值也很少遇到,而且這些值也很容易辨認,因此這很有利於在 debug 版中發現 release 版才會遇到的錯誤
C 找出出現最多的數
編寫乙個程式,讀入一組整數,這組整數是按照從小到大的順序排列的,它們的個數n也是由使用者輸入的,最多不會超過20。然後程式將對這個陣列進行統計,把出現次數最多的那個陣列元素值列印出來。如果有兩個元素值出現的次數相同,即並列第一,那麼只列印比較小的那個值。輸入格式 第一行是乙個整數n 接下來有n行,每...
VC為什麼會輸出燙
vc經常輸出燙的原因是,在vc的debug編譯選項下,棧區的未初始化資料,每乙個byte都被設定為0xcc,cccc的漢字編碼就是燙。比如 1 include include int main int argc,char argv 以上 在vc的dubeg模式下會輸出燙,在release模式下輸出空...
找出出現奇數次的數
題目 給你n個數,其中有且僅有乙個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那乙個數。給你n個數,其中有且僅有兩個數出現了奇數次,其餘的數都出現了偶數次。用線性時間常數空間找出出現了奇數次的那兩個數。答案 從頭到尾異或一遍,最後得到的那個數就是出現了奇數次的數。這是...