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'; 展开
char str1[]="1234"; //这句换成char str1[4]="1234";后,printf输出结果后边为什么会有乱码?
char *str2=str1;
*str2='8';
第二段:
char *str3="6789"; //此处"6789"所在的内存空间与"1234"所在的内存空间有什么不同?为什么str3[1]='2';提示内存不能写入?
str3[1]='2'; 展开
展开全部
你好!!
1.char str1[]="1234";此时没有指出数组的大小,表示把字符:“1234”4个字符赋值给数组,注意此时系统会自动在字符串的最后添加一个结束标志即‘\0’,输出的时候,编译器就是先判断有没有遇见结束标志。要是没有就会一直输出,直到遇见结束标志。
而char str1[4]="1234";此时我定义数组的大小是4,那么此时的字符的个数就是4,那么自动就不能在字符串的最后添加一个结束标志,所以输出的时候在输出"1234"后还会输出直到遇见结束标志,因此最后还有一些乱码,
解决的方法可以把数组的大小大于5就可以了。
2.
char *str3="6789"; 此时定义了一个指针变量,此时系统会把字符串:“6789”放到内存的静态存储区(即内存的一种,是静态的原因是里的值是不能修改的)并把字符串的首地址赋值给指针变量str3,使指针变量指向字符串;
str3[1]='2';表示要修改静态存储区的值,但是那里的是常量不能修改的。所以出错误。
1.char str1[]="1234";此时没有指出数组的大小,表示把字符:“1234”4个字符赋值给数组,注意此时系统会自动在字符串的最后添加一个结束标志即‘\0’,输出的时候,编译器就是先判断有没有遇见结束标志。要是没有就会一直输出,直到遇见结束标志。
而char str1[4]="1234";此时我定义数组的大小是4,那么此时的字符的个数就是4,那么自动就不能在字符串的最后添加一个结束标志,所以输出的时候在输出"1234"后还会输出直到遇见结束标志,因此最后还有一些乱码,
解决的方法可以把数组的大小大于5就可以了。
2.
char *str3="6789"; 此时定义了一个指针变量,此时系统会把字符串:“6789”放到内存的静态存储区(即内存的一种,是静态的原因是里的值是不能修改的)并把字符串的首地址赋值给指针变量str3,使指针变量指向字符串;
str3[1]='2';表示要修改静态存储区的值,但是那里的是常量不能修改的。所以出错误。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询