典中典乱码之烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫

404joker404 Lv3
起因

今天翻了一本好久以前的书
图

简直是典故了,另外也有“锟斤拷”和“屯屯屯”两个典,虽然知道是乱码,但我想更具体一步,扒下细嗦

烫烫烫

在 Visual Studio 中的 Debug 模式下,如果声明一个变量,但是没有初始化,微软会给未初始化的内存复制为 0xCC。

因为0xCC 其实是 INT3 中断指令,所以如果在Debug 模式下试图去执行这块未初始化的内存的话就会中断程序。

VS中的调试器默认的字符集是 MBCS

    多字节字符集 (MBCS) 是一种支持无法用单字节表示的字符集(如日语和中文)的旧方法。 如果要进行新的开发,则应对所有文本字符串(最终用户不会看到的系统字符串也许可以除外)使用 Unicode。 MBCS 是旧技术,不建议用于新开发。(来自微软官方)

而在 MBCS 中 0xCCCC (就是两个0xcc)正好就是中文 (一个汉字两字节) 中的“烫

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

测试

    #include<stdio.h>  
    #include<malloc.h>  
    #include<Windows.h>
    int main()
    {
        char a[100];
        printf("%s\n", a);

        char* p = (char*)malloc(10);
        if (p != NULL)
        printf("%s", p);
        free(p);
        system("pause");
    }

结果

result

虽然还有“锟斤拷”和“锘锘锘”,但是我不常见到,就不展开了

  • 标题: 典中典乱码之烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫
  • 作者: 404joker404
  • 创建于 : 2024-09-07 14:50:35
  • 更新于 : 2024-09-07 21:52:16
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
此页目录
典中典乱码之烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫