函数原型
void memcpy(voiddestin, const void *src, size_t n);
功能
由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。
头文件
#include<string.h>
返回值
函数返回一个指向dest的指针。
例1:如果用来复制字符串,输出的顺序是正常的
#include<stdio.h>
#include<string.h>
int main()
{
char* s="1a2b3c4d";
char ch[20];
memcpy(ch,s,strlen(s));
ch[strlen(s)]='\0';//因为从d[0]开始复制,总长度为strlen(s),d[strlen(s)]置为结束符
printf("%s",d);
return 0;
}
//输出结果为1a2b3c4d
例2:如果用来复制整形(多字节数据),输出结果是逆向的
#include <stdio.h>
#include <string.h>
int main()
{
int sh=0x1a2b3c4d;
char ch[4];
memcpy(ch,&sh,4);
printf("%2x%2x%2x%2x\n",ch[0],ch[1],ch[2],ch[3]);
return 0;
}
//输出结果为4d3c2b1a
其原因在于,计算机在存储整形数0x1a2b3c4d时,采用的小端模式,即低位在左,高位在右,4d为低位放在低地址,1a高位放在高地址:
地址位 | 0x1d9656c0 | 0x1d9656c1 | 0x1d9656c2 | 0x1d9656c3 |
---|---|---|---|---|
数据 | 4d | 3c | 2b | 1a |
所以拷贝后输出顺序是反着的。而字符串的存储则是正常顺序(1a到4d从左往右依次存放),所以输出也是正常顺序。