【乱码】输出乱码,乱码“烫烫烫……”分析
源地址
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;想读到哪为止,就在这个位置后面写入结束符 |