你的C++为什么‘烫‘了,又为什么‘屯‘了?

本文探讨了在C++编程中,未初始化的char数组和指针为何会出现特定字符如'烫'和'屯'。通过VS2015和调试工具,解释了内存中默认填充的'cc'和'cd'如何在中文编码中对应这两个字符。建议程序员在声明变量后进行初始化,以避免类似问题。
摘要由CSDN通过智能技术生成

你是不是有过这样的经历?写C/C++的时候,出现这种奇怪的字符串,比如出现如下字符
在这里插入图片描述
然后还出现这种字符串
在这里插入图片描述
你回头一看,最终发现了问题,肯定是下面这两种问题。

出现’烫’的时候,是你声明了一个char数组,但是没有赋值任何数据

char a[2];

出现’屯’,是你声明了char指针,也没有给它任何数据

char * a = new char[2];

并且,你还是用的编辑器是vs,还是debug模式,我说的对不对?

问题出现了,也知道怎么出现的,应该想想为什么出现’烫’,而没有出现’汤’,为什么出现"屯",没有出现”吨“

好,开始说说为什么

准备工作:vs2015,win10

创建一个C++控制台程序,输入以下代码

#include "stdafx.h"
int main(int ArgCount, char **Args)
{
  char a[2];
  return 0;
}

好了,准备完毕,开始

在上面代码第五行上打断点,F5跑起来,把鼠标放到a上,看看a的内存地址是什么
在这里插入图片描述
我的地址是0x008ffea8

然后把vs工具栏:调试->窗口->内存->内存1,打开,然后把刚才得到的0x008ffea8地址,输入到地址栏里
在这里插入图片描述
操作完上述流程后,看见没有?下面的内容变了,看地址0x008ffea8处的内容,是cc cc cc cc…这个内容就是目前a里的内容。

为啥是cc呢?你又没有给它填充过cc

其实这个填充cc和编译器行为有关系,当声明一个数组还未初始化的时候,编译器会给你自动填充cc

正好,cccc在中文编码中,就是’烫’ 字。

同理,再看看指针声明,把数组改成指针

#include "stdafx.h"
int main(int ArgCount, char **Args)
{
  char * a = new char[2];
  return 0;
}

现在内存中的内容是cd cd ,这同样也是编译程序自动填充的内容
在这里插入图片描述
同样正好,cdcd在中文编码中,就是’屯’ 字。

就这样,就是这个意思,出现’烫’和’屯’,并非出现的乱码,内存中就是存的就是这些,所以,写程序的时候,定义完变量,最好给他填充一下,最简单的,如果是数组的话,给他赋值个花括号,

char a[2] = {};

如果是指针的话,用memset给他填充一下

memset(a, 0, 2);
  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值