燙燙燙燙燙燙!
相信這個標題,有十個人看,就有十個人搞不懂什么意思。

只有程序員才有可能點點頭,然后會心一笑。
似乎這是程序員才懂的某種黑話。
知乎上有個這樣的問題:“用一句話證明自己是程序員?”

“燙燙燙燙燙燙”
簡單幾行字,高贊上榜。

但是,這個“燙燙燙燙燙燙”到底是個啥意思?
莫非是程序?qū)L燙的CPU發(fā)出的控訴?
其實,答案非常簡單——亂碼。

道理我都懂,但為什么亂碼偏偏是這串有點好笑的“燙燙燙燙燙燙”呢?
那就要從這段程序到底經(jīng)歷了什么開始講起了。
Visual Studio的編譯器分配完空間后,會順手往里面裝進去一點內(nèi)容。默認裝進去的東西也有幾種差別:
①未分配或靜態(tài)分配但未賦初值的內(nèi)存空間,初值用0xCCCC填充;
②動態(tài)分配但未賦初值的內(nèi)存空間,初值用0xCDCD填充;
③動態(tài)分配后又被回收了的內(nèi)存空間,用0xDDDD填充;
正常情況下,這些內(nèi)容是不會被訪問到的。當然,這是正常情況。
當發(fā)生一些bug,如非常常見的數(shù)組越界的時候,事情就發(fā)生了。
因為bug,剛好以字符輸出了情況①的填充內(nèi)容,我們就會看到華麗而壯觀的……

我們知道,在中國,VS輸出漢字用的是GBK編碼。
是的,0xCCCC就是“燙”的GBK編碼!
順帶一提,0xCDCD對應(yīng)的是漢字“屯”,而0xDDDD對應(yīng)的是漢字“葺”。
這個bug實在是太常見了,“燙燙燙燙燙燙”也就順勢走紅,甚至被當成了黑話。
不過,這個bug不是每次都會以這個滑稽又有點可愛的形式出現(xiàn)。

只有在按字符輸出的情況下才能看到這些。
按int輸出的話,看到的,只有索然無味的
-858993460(0xCCCCCCCC)
-842150451(0xCDCDCDCD)
-572662307(0xDDDDDDDD)
GBK編碼確實為中國程序員帶來了很多意想不到的麻煩。但也為大家?guī)砹撕芏嗄涿畹臍g樂。
比如名聲更大的神秘東方武器“錕斤拷”!
感興趣的小伙伴們可以自己查一查哦~

