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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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个字符后面还会接一些不可知的东西才对啊?

参考技术A 你这代码编译都不会过,怎么还会有输出?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

memcpy和strcpy的区别

参考技术A strcpy

n. 拷贝字符串
短语
define STRCPY 宏定义
STRCPY strcpy 字符串拷贝
strcpy wcscpy 拷贝字符串
例句:
You also haveto use the memalign function and strcpy to copy the data into anarea of appropriate alignment.
另外,还需要使用 memalign 函数和 strcpy 将数据复制到合适对齐的区域。

memcpy
内存块拷贝
短语
memcpy memcpy 复制内存区域
例句:
Generally, the memcpy function will be a checkpoint for this.
一般情况下,memcpy 函数将是用于此目的的检查点。

以上是关于关于c语言数组的memcpy的一个问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言中怎么把一维数组赋给另外一个一维数组

C语言中的复制函数(strcpy和memcpy)

memcpy和strcpy的区别

C语言,请问如何将结构体中的结构体拷贝到内存

C语言如何深拷贝结构体?

c语言 二进制的byte数组转化为int数组