2 binge88888 binge88888 于 2016.05.10 23:56 提问

C语言为什么老是出现烫呢?

#include
struct aa
{
char a[3];
char b[3];
char c[3];
char d[3];
char f[3];
}p1={"红","黄","蓝","白","黑"};
int main()
{
struct aa p1;
printf("%s%s%s%s%s\n",p1.a,p1.b,p1.c,p1.d,p1.f);
return 0;
}
为什么老是出现烫呢?

6个回答

wll1228
wll1228   2016.05.11 07:30

你的全局变量p1和局部变量p1重名,在main函数中使用没有初始化的p1,所以输出默认值。

caozhy
caozhy   Ds   Rxr 2016.05.11 00:03

因为没有赋值。VC++ 6.0为了便于调试,所以在debug版上,会默认将没有分配的内存设置为0xcccccccccccc........
而0xcccc正好是“烫”的内码。
如果你用release编译,而不是debug,那么结果就是随机的。

havedream_one
havedream_one   2016.05.11 08:06

p1没有进行初始化,重新初始化

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.05.11 09:14

你是不是也经常看见“辊斤考”?

herozhangbz
herozhangbz   2016.05.11 11:33

你需要在main函数里声明变量并初始化,而且你的结构体最好改成指针。struct aa{ char *a;……};然后在主函数里面声明p1 。struct aa p1={"红",……}。然后就可以输出了

ZGZ1002
ZGZ1002   2016.05.11 13:45

因为没有赋值。VC++ 6.0为了便于调试,所以在debug版上,会默认将没有分配的内存设置为0xcccccccccccc........
而0xcccc正好是“烫”的内码。
如果你用release编译,而不是debug,那么结果就是随机的。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言出现“烫”字符的内存分析
近来看网上好评颇高的C++反汇编与逆向技术揭秘一书,结合以前看过的零零散散的知识,对比印证,收获颇多,联想起大学时候刚学C语言时候碰到输出字符串时偶尔会输出‘烫’字符的异常情况时百思不得其解的情况,于是就写了这个小文章,希望可以解开一些C语言初学者的疑惑。 几个基础知识 1:栈的定义    栈是一种先进后出的存储方式,在C等高级语言里面,是通过数据结构来实现的,而汇编则可以使
文件写入或控制台输出显示:"烫烫烫烫"问题解决办法
本来不想写的,因为这个问题实在是太”low”了…但是想到还有好多跟自己一样被这么”low”的问题困扰的新手们,还是记录一下(其实百度一下就能解决): 问题根源: 在windows平台下,ms的编译器(也就是vc带的那个)在 Debug 模式下,会把未初始化的栈内存全部填成 0xcc,用字符串来看就是”烫烫烫烫烫烫烫”,未初始化的堆内存全部填成0xcd,字符串看就是“屯屯屯屯屯屯屯屯”。 说人话:定
VC中出现“烫烫烫”的原因分析
小生最近开始重新学习C语言,在VC中联系小程序,在运行时有幸遇见了神秘的“烫烫。。。”如下: 程序很小很简单,自己认为我的逻辑也没错,并且还没有语法错误,可是为什么会这样呢? 这一个个烫可是把我的心都烫着了! 接下来我们分析分析: 我的程序中字符串数组str1是将经过gets()函数输入,将其复制到str2中。在键盘输入字符串后,VC会自动给str1末尾加‘\0’,而str2就没这
输出"烫烫烫烫烫烫烫烫烫烫烫烫"
因为输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC(打个比方,你定义一个10个元素的char数组,结果你初始化了2个元素,后面没初始化,没赋值,没有使用,就变CC了)。CC CCH在Unicode的编码中就是表示中文的“烫”,所以就是很多“烫”字。************************************************************
程序中出现“烫烫烫烫烫烫烫.......”和“屯屯屯屯屯屯......”的原因
范德萨发
关于c的烫烫烫烫烫烫
为什么我们有时候在进行字符串处理的问题中,当我们输出字符串的值的时候,或者我们调试程序查看字符串变量的值的时候,会出现"烫"和"屯:等怪异的中文字符,其实这个问题的往往是由于要访问的地址的内容字符未被初始化,或者我们访问了非法内存。 未初始化的变量会被系统赋初值为0xCC,超过了ASCII码0-127这个范围,因此这个"字符串"被系统当成了宽字符组成的字符串,即两个字节数据组成一个字符,而0xC
烫烫烫烫烫烫烫----在使用指针进行字符串copy
#include using namespace std; int main() {  char str1[]="I Love China";  char str2[20];  char *p1=str1,*p2=str2;  for(;*p1!='\0';p1++,p2++)  {   *p2=*p1;  }  *p2='\0';  p2++;  *p2='A';
C++中为什么出现“屯屯屯屯屯”和“烫烫烫烫烫烫”
出现以上原因都是由于内存没有初始化造成的,而对于栈中内存如果没有初始化,则会出现“烫烫烫烫烫烫”。对于堆中内存如果没有初始化,则会出现“屯屯屯屯屯”,有时候我们的数组没有结束符,输出数组也会有这些汉字的出现,就是因为没有结束符占用了后面的空闲的内存块即没有初始化的内存块
浅析"烫烫烫烫"是怎么来的
浅析"烫烫烫烫"是怎么来的在用VC写代码时,经常会遇到在栈中申请空间的并且没有被初始化的字符数组就会显示"烫烫烫烫。。。",虽然是知道编译器对栈中没有初始化的数据会进行默认的初始化工作,但是一直不得要领,在拜读《程序员的自我修养》的时候有所收获,还挺有意思的,写出来和大家分享。代码很简单,就是在栈中申请了一个大小为4个字节的字符数组。int main(void) { char x[4]; return 0; }用断点查看X的值,可以发现,“烫烫”出现了:x 0x0012ff60 "烫烫烫烫?"
字符串不进行初始化,那就等着bug蹦出来吧! (也谈程序为啥经常出现“烫烫烫烫烫烫”)
之前在程序中没有对字符串进行初始化,结果总是有bug, 调试后才发现了真正原因,现示意如下: #include using namespace std; int main() { char str1[100] = "abc"; cout << str1 << endl; char str2[100]; int i; for(i = 0; i < 3; i++) { st