C++ 烫烫烫 屯屯屯

1.概要

“烫烫烫” 和“屯屯屯"一般我们应该是见过的,原因是啥呢。

原因(烫):Visual Studio 中的 debug 模式下,如果声明一个变量没有赋值,会默认赋值为”0xCC“。为什么是”0xCC“?0xCC 其实是 INT3 中断指令(所以如果在Debug 模式下试图去执行这块未初始化的内存的话就会中断程序)。

原因(屯)但 VS 中调试器默认的字符集是 MBCS,而在 MBCS 中 0xCCCC (就是两个0xcc)正好就是中文 (一个汉字两字节) 中的“烫”,所以显示出来就都是烫……

2.代码

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>

int main()
{
    std::cout << "Hello World!\n";
	//烫烫烫
	char a[5];
	a[0] = 'a';//第一个赋了值
	printf("%s\n", a);

	//屯屯屯
	char* p = (char*)malloc(16);
	if (p)
		printf("%s", p);
	free(p);
	return 0;
}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧: 
//   1. 使用解决方案资源管理器窗口添加/管理文件
//   2. 使用团队资源管理器窗口连接到源代码管理
//   3. 使用输出窗口查看生成输出和其他消息
//   4. 使用错误列表窗口查看错误
//   5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
//   6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件

3.运行结果

4.引用参照

为什么乱码总是写“屯屯屯屯屯屯屯”或是“烫烫烫烫烫烫”? - 知乎

《C++的十万个为什么》 [60]程序输出中的“屯屯屯”乱码是怎么回事?-优快云论坛

经典乱码“烫烫烫”和“屯屯屯”_一叶知秋的博客-优快云博客_烫烫烫屯屯屯

### 关于代码输出“”的可能原因 在编程过程中,当遇到代码输出异常字符(如“”),通常可能是由于以下几个方面引起的: #### 1. **编码问题** 如果程序涉及字符串处理或文件读写操作,则可能存在编码不匹配的情况。例如,在某些情况下,UTF-8 编码的 BOM 字节可能会被误解读为普通字符,从而导致显示异常[^1]。 解决方案可以尝试以下措施: - 明确指定源文件和运行环境中的编码方式。 - 如果使用的是 UTF-8 文件,建议去掉 BOM 头部。 ```python with open('file.txt', 'r', encoding='utf-8-sig') as f: content = f.read() print(content) ``` #### 2. **未初始化变量** 在调试模式下,编译器会自动填充未初始化的内存区域以帮助开发者发现潜在问题。例如,在 Visual Studio 的 Debug 模式中,未初始化的内存会被设置为 `0xCC`,这可能导致意外的行为或输出[^2]。 对于这种情况,应确保所有变量都已正确定义并赋初值后再参与运算。 ```c++ int value = 0; // 初始化变量 std::cout << value; ``` #### 3. **数据传输错误** 假设当前项目依赖某种输入/输出框架来传递消息至终端屏幕。“”现象也可能源于网络协议栈解析失败或是序列化反序列化进程中的偏差。基于系统论视角来看待此类状况时,需着重审查三个要素——即实际传入的数据流形式、中间转换逻辑以及最终呈现效果之间的关联性[^3]。 #### 4. **动态分配资源不当** 通过 C++ 中的新建实例机制创建对象期间如果没有妥善调用构造函数就可能出现不可预期的结果。这是因为即使成功获取堆地址但仍缺少必要的属性配置步骤所致[^4]。因此务必遵循标准流程实现完整的实例生成过程。 --- ### 提供一段示范修复后的伪代码片段如下所示: ```cpp class Example { public: std::string text; Example() : text("default") {} // 构造函数显式定义默认值 }; Example* examplePtr = new Example(); delete examplePtr; // 使用完毕释放指针指向的对象 examplePtr = nullptr; // 防止悬空指针隐患 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值