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

您所在的位置:网站首页 屯是什么意思怎么读 你的C++为什么‘烫‘了,又为什么‘屯‘了?

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

2024-06-20 20:14| 来源: 网络整理| 查看: 265

你是不是有过这样的经历?写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);


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3