相信这个标题,有十个人看,就有十个人搞不懂什么意思。

 

烫烫烫烫烫烫!

 

只有程序员才有可能点点头,然后会心一笑。

 

似乎这是程序员才懂的某种黑话。

 

 

 

知乎上有个这样的问题:“用一句话证明自己是程序员?”

 

烫烫烫烫烫烫!

 

“烫烫烫烫烫烫”

 

简单几行字,高赞上榜。

 

烫烫烫烫烫烫!

 

但是,这个“烫烫烫烫烫烫”到底是个啥意思?

 

莫非是程序对滚烫的CPU发出的控诉?

 

其实,答案非常简单——乱码

 

烫烫烫烫烫烫!

 

道理我都懂,但为什么乱码偏偏是这串有点好笑的“烫烫烫烫烫烫”呢?

 

 

那就要从这段程序到底经历了什么开始讲起了。

 

Visual Studio的编译器分配完空间后,会顺手往里面装进去一点内容。默认装进去的东西也有几种差别:

 

①未分配或静态分配但未赋初值的内存空间,初值用0xCCCC填充;

②动态分配但未赋初值的内存空间,初值用0xCDCD填充;

③动态分配后又被回收了的内存空间,用0xDDDD填充;

 

正常情况下,这些内容是不会被访问到的。当然,这是正常情况。

 

当发生一些bug,如非常常见的数组越界的时候,事情就发生了。

 

因为bug,刚好以字符输出了情况①的填充内容,我们就会看到华丽而壮观的……

 

烫烫烫烫烫烫!

 

我们知道,在中国,VS输出汉字用的是GBK编码。

 

是的,0xCCCC就是“烫”的GBK编码

 

顺带一提,0xCDCD对应的是汉字“屯”,而0xDDDD对应的是汉字“葺”

 

这个bug实在是太常见了,“烫烫烫烫烫烫”也就顺势走红,甚至被当成了黑话。

 

不过,这个bug不是每次都会以这个滑稽又有点可爱的形式出现。

 

烫烫烫烫烫烫!

 

只有在按字符输出的情况下才能看到这些。

 

按int输出的话,看到的,只有索然无味的

 

-858993460(0xCCCCCCCC)

-842150451(0xCDCDCDCD)

-572662307(0xDDDDDDDD)

 

GBK编码确实为中国程序员带来了很多意想不到的麻烦。但也为大家带来了很多莫名其妙的欢乐。

 

比如名声更大的神秘东方武器“锟斤拷”

 

感兴趣的小伙伴们可以自己查一查哦~