c语言指针

第一段:charstr1[]="1234";//这句换成charstr1[4]="1234";后,printf输出结果后边为什么会有乱码?char*str2=str1;*... 第一段:
char str1[]="1234"; //这句换成char str1[4]="1234";后,printf输出结果后边为什么会有乱码?
char *str2=str1;
*str2='8';
第二段:
char *str3="6789"; //此处"6789"所在的内存空间与"1234"所在的内存空间有什么不同?为什么str3[1]='2';提示内存不能写入?
str3[1]='2';
展开
 我来答
猪头或火宝宝
2010-09-15 · TA获得超过2758个赞
知道小有建树答主
回答量:1001
采纳率:0%
帮助的人:1525万
展开全部
你好!!
1.char str1[]="1234";此时没有指出数组的大小,表示把字符:“1234”4个字符赋值给数组,注意此时系统会自动在字符串的最后添加一个结束标志即‘\0’,输出的时候,编译器就是先判断有没有遇见结束标志。要是没有就会一直输出,直到遇见结束标志。

而char str1[4]="1234";此时我定义数组的大小是4,那么此时的字符的个数就是4,那么自动就不能在字符串的最后添加一个结束标志,所以输出的时候在输出"1234"后还会输出直到遇见结束标志,因此最后还有一些乱码,

解决的方法可以把数组的大小大于5就可以了。
2.
char *str3="6789"; 此时定义了一个指针变量,此时系统会把字符串:“6789”放到内存的静态存储区(即内存的一种,是静态的原因是里的值是不能修改的)并把字符串的首地址赋值给指针变量str3,使指针变量指向字符串;
str3[1]='2';表示要修改静态存储区的值,但是那里的是常量不能修改的。所以出错误。
ganpengjin
2010-09-15 · TA获得超过115个赞
知道答主
回答量:279
采纳率:0%
帮助的人:185万
展开全部
char str1[4]="1234";
存储的时候是:1 2 3 4 \0所以这是溢出的问题,你把数组改成str[5]就OK了。
str3跟str1、str2分配的内存地址都不一样,他们都是在栈上分配的地址,但是都给每个指针都 分配了地址,所以不一样,而*str3是个字符串指针,定义的时候就直接赋予了初始值,它的值就不能再改变了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式