源代码:#include <stdio.h>#include <stdlib.h>void main(){ char a[]="asd",b[]="jkui"; char *p1,*p2; p1=a;p2=b; while(*p2!='\0') { *p1=*p2; p1++; p2++; } int i=0; printf("%s",a); while(a[i]!='\0') { //printf("%c",a[i]); i++; } printf("\n%d",i);}输出结果:jkui+一段乱码15 求大神解答
char a[]="asd",b[]="jkui";相当于做了如下定义:char a[3]="asd";其中,a[0]~a[2]是'a','s','d';a[3]='\0',再多,有可能会溢出,也就是出现乱码。char b[4]="jkui";也同理。在字符串a之后,定义了数组b,也就是说字符串a后就是字符串b,换句话说其后内存空间一定被占用了,使得内存空间不连续,字符串连续存储有可能会溢出,内存的相应存储空间若被使用,会报错,不然也可能会输出乱码,这不奇怪啊。修正为:#include <stdio.h>#include <stdlib.h>int main(){ char a[]="asd",b[]="jkuikkkkk"; char *p1,*p2; p1=a;p2=b; while(*p2!='\0') { *p1=*p2; p1++; p2++; } *p1='\0'; //对数组a赋值后加入字符串结束标志就没问题了。 int i=0; printf("%s",a); while(a[i]!='\0') { //printf("%c",a[i]); i++; } printf("\n%d",i);}