【乱码】输出乱码,乱码“烫烫烫……”分析

源地址

 http://topic.csdn.net/u/20110628/16/61312566-c5b8-4b31-b910-b1cc57157992.html

 

输出的是隐藏了烫烫烫那部分,那系统调用a时,烫烫烫是否存在?

初始化变量的时候,系统开辟出的内存,系统究竟赋给它什么初值了?且这些初值究竟是以什么类型存放的。。。

 

1、在vs调试时,内存会用0cc来初始化,而0xcccc恰好是"烫"的编码

 

2、debug下,没有初始化的数据,编译器自动填充,填充的值正好输出显示为 烫。

release就未定义了。

'\0' 是字符串结束符

 

3、是因为你没有给你的字符串设置结束符,才会读到乱码的,比如

char a[100],你分配空间后,设置 a[100] = 0;想读到哪为止,就在这个位置后面写入结束符

 

4、cout类重载了针对char*类型的<<操作,输出的时候是根据字符'\0'判断字符结尾的,如果没有找到'\0'就一直往下输出,并不会考虑内存里的东西到底是什么,超出ascii定义的内容就以一些“乱码”输出(具体我也不知道是如何对应的。
对于char 数组来说,新开辟的内存如果没有经过初始化,内存里的值是不确定的,可能是上次程序运行遗留下来的值。常见的初始化操作包括memset()和char buf[1024]={0}

 

 

是因为你没有给你的字符串设置结束符,才会读到乱码的,比如

char a[100],你分配空间后,设置 a[100] = 0;想读到哪为止,就在这个位置后面写入结束符
是因为你没有给你的字符串设置结束符,才会读到乱码的,比如

char a[100],你分配空间后,设置 a[100] = 0;想读到哪为止,就在这个位置后面写入结束符


 

 

posted on 2022-10-04 01:31  bdy  阅读(4587)  评论(0编辑  收藏  举报

导航