关于c语言数组的memcpy的一个问题

如:
char m[5]={"1234"};
char n[5]={};
char q[5]={'1','2','3','4','5'};
char x,y,z;

memcpy(m+1,s+12,4);
x=strlen(m);
memcpy(n,a+2,4);
y=strlen(n);
memcpy(q+1,b+12,4);
z=strlen(q);
printf("%s\n%s\n%s\n",m,n,q);
printf("%d\n%d\n%d\n",x,y,z);

用cfree输出:
1View
3456
1View
5
4
5
请按任意键继续. . .

数组m和q长度为5,那通过memcpy复制了之后字符已经占用了5个,那\0去了哪?按道理打印出来5个字符后面还会接一些不可知的东西才对啊?

第1个回答  2017-10-08
你这代码编译都不会过,怎么还会有输出?s、a、b在哪里?又,memcpy是按字节数拷贝的,你写的memcpy(q+1,b+12,4);拷贝字节数是4,拷贝到q+1起的4个字节上,并没有越界,若原来有'\0',那'\0'还在;若原来没有,拷贝后还是没有。追问

有输出啊,输出我都贴出来了,不好意思,s a b忘了贴出来,是
char *s="GoldenGlobalView";
char b[17]="GoldenGlobalView"; //16个字符 + '\0' 共17个字符
char a[7]={'1','0','3','4','5','6','7'}; //strlen(a)=7,sizeof(a)=7

本回答被网友采纳
相似回答