1. memcpy
void *memcpy(
void *dst,
const void *src,
size_t count
);
功能:拷贝src地址 count字节 到dst地址
返回值:该函数返回一个指向目标存储区 dst 的指针。
2. memmove
void *memmove(
void *dst,
const void *src,
size_t count
);
功能:memmove用于拷贝字节,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,但复制后源内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同
3. memccpy
void *memccpy(
void *dest,
void *src,
unsigned char c,
unsigned int count
);
功能:由src所指内存区域复制不多于count个字节到dest所指内存区域,如果遇到字符c则停止复制。 返回值:如果c没有被复制,则返回NULL,否则,返回一个指向紧接着dest区域后的字符的指针。
4. 区别与相同
相同:这三个函数的功能均是将某个内存块复制到另一个内存块,
区别:唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。
5. 内存重叠问题
拷贝的目的地址在源地址的范围内,有重叠。
例如:
char s[32] = "abcdefg";
char* p = s;
p++:
strcpy(p, s);