烫烫烫(烫烫烫烫烫烫)
相信这个标题,有十个人看,就有十个人搞不懂什么意思。
只有程序员才有可能点点头,然后会心一笑。
似乎这是程序员才懂的某种黑话。
知乎上有个这样的问题:“用一句话证明自己是程序员?”
“烫烫烫烫烫烫”
简单几行字,高赞上榜。
但是,这个“烫烫烫烫烫烫”到底是个啥意思?
莫非是程序对滚烫的CPU发出的控诉?
其实,答案非常简单——乱码。
道理我都懂,但为什么乱码偏偏是这串有点好笑的“烫烫烫烫烫烫”呢?
那就要从这段程序到底经历了什么开始讲起了。
Visual Studio的编译器分配完空间后,会顺手往里面装进去一点内容。默认装进去的东西也有几种差别:
①未分配或静态分配但未赋初值的内存空间,初值用0xCCCC填充;
②动态分配但未赋初值的内存空间,初值用0xCDCD填充;
③动态分配后又被回收了的内存空间,用0xDDDD填充;
正常情况下,这些内容是不会被访问到的。当然,这是正常情况。
当发生一些bug,如非常常见的数组越界的时候,事情就发生了。
因为bug,刚好以字符输出了情况①的填充内容,我们就会看到华丽而壮观的……
我们知道,在中国,VS输出汉字用的是GBK编码。
是的,0xCCCC就是“烫”的GBK编码!
顺带一提,0xCDCD对应的是汉字“屯”,而0xDDDD对应的是汉字“葺”。
这个bug实在是太常见了,“烫烫烫烫烫烫”也就顺势走红,甚至被当成了黑话。
不过,这个bug不是每次都会以这个滑稽又有点可爱的形式出现。
只有在按字符输出的情况下才能看到这些。
按int输出的话,看到的,只有索然无味的
-858993460(0xCCCCCCCC)
-842150451(0xCDCDCDCD)
-572662307(0xDDDDDDDD)
GBK编码确实为中国程序员带来了很多意想不到的麻烦。但也为大家带来了很多莫名其妙的欢乐。
比如名声更大的神秘东方武器“锟斤拷”!
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com