當前位置:
首頁 > 趣味 > 手持兩把錕斤拷,口中疾呼燙燙燙:亂碼是怎麼來的?

手持兩把錕斤拷,口中疾呼燙燙燙:亂碼是怎麼來的?

大一剛學C語言,第二次上機課,當我發現我照著書抄寫的程序在運行之後的黑框里跳出一排燙燙燙燙燙,當時就震驚了。你們能想像一個來自小城,在大學之前沒怎麼接觸過電腦更不懂代碼的孩子當時內心的恐懼嗎?我真的以為這是電腦過熱發出的警告,於是我彎下腰把插頭拔了。—— From. chengr28
問題:照著書抄寫的程序,在運行之後的黑框里跳出的一排「燙燙燙燙燙」字樣是什麼?

@豬了個去 回答:

手持兩把錕斤拷,口中疾呼燙燙燙

在Visual Studio中的Debug模式下,如果聲明一個變數,但是沒有初始化,微軟會給未初始化的內存複製為0xCC。給為初始化的內存賦0xCC是有原因的,0xCC其實是INT3中斷指令,所以如果在Debug模式下試圖去執行這塊未初始化的內存的話就會中斷程序。

但VS中調試器默認的字符集是MBCS,而在MBCS中0xCCCC正好就是中文中的「燙」,所以顯示出來就都是燙……

如果是用分配堆的內存,會初始化成0xCD,0xCDCD在MBCS字符集中就是屯……

錕斤拷則涉及unicode的字符集轉換問題,Unicode和老編碼體系的轉化過程中,肯定有一些字,用Unicode是沒法表示的,Unicode官方用了一個佔位符來表示這些文字,這就是:U+FFFD REPLACEMENT CHARACTER。U+FFFD的UTF-8編碼是0xEFBFBD,如果重複多次形成:EFBFBDEFBFBDEFBFBD 這樣

在GBK/CP936/GB2312/GB18030的環境(都是中國標準惹的禍)中顯示的話,一個漢字2個位元組,最終的結果就是:錕斤拷——錕(0xEFBF),斤(0xBDEF),拷(0xBFBD)……

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 jjbird 的精彩文章:

有哪些讓你覺得神奇的冷知識?

TAG:jjbird |