烫烫烫(烫烫烫烫烫烫)

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

烫烫烫(烫烫烫烫烫烫)(1)

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

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

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

烫烫烫(烫烫烫烫烫烫)(2)

“烫烫烫烫烫烫”

简单几行字,高赞上榜。

烫烫烫(烫烫烫烫烫烫)(3)

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

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

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

烫烫烫(烫烫烫烫烫烫)(4)

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

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

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

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

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

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

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

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

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

烫烫烫(烫烫烫烫烫烫)(5)

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

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

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

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

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

烫烫烫(烫烫烫烫烫烫)(6)

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

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

-858993460(0xCCCCCCCC)

-842150451(0xCDCDCDCD)

-572662307(0xDDDDDDDD)

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

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页