c/c++拷贝函数

c/c++拷贝函数
memcpy()函数概要原型void * memcpy ( void * dest, const void * src, size_t num );功能memcpy()会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上memcpy()并不关心被复制的数据类型只是逐字节地进行复制这给函数的使用带来了很大的灵活性可以面向任何数据类型进行复制注意1.dest 指针要分配足够的空间也即大于等于 num字节的空间。2.dest 和 src所指的内存空间不能重叠重叠可能会导致拷贝数据错误3.memcpy拷贝结束后不会给dest末尾添加‘/0’4.memcpy不会检查src或dest的实际内存边界它只是机械地复制num字节num大于小于dest和src的长度都不会阻止在vs2022会报警告。返回值返回指向 dest 的指针。注意返回的指针类型是void*使用时一般要进行强制类型转换。举个例子int main() { const char* p1 HEllO; char* p2 (char*)malloc(sizeof(char) * 10); char* p3 (char*)memcpy(p2, p1, 6); cout p3 endl; }memmove函数概要原型void *memmove(void *dest, const void *src, size_t num);功能memmove()会复制 src 所指的内存内容的前 num 个字节到 dest所指的内存地址上注意1.memmove() 更为灵活当src 和 dest所指的内存区域重叠时memmove() 仍然可以正确的处理不过执行效率上会比使用 memcpy()略慢些。处理方式就是如果src长度小于dest就从头开始复制如果src长度大于dest就从后往前复制这样就可以保证内存区域重叠时正确复制2.memmove的特性基本上和memcpy一致。返回值返回指向 dest 的指针。注意返回的指针类型是void使用时一般要进行强制类型转换举个例子int main() { char str[] memmove can be very useful......; memmove(str 20, str 15, 11); puts(str); return 0; }strcpy()函数概要原型char*strcpy(char *dest, const char *src);功能strcpy() 把src所指的由/0结束的字符串复制到dest 所指的数组中返回指向dest 字符串的起始地址(连同/0)注意1.如果参数 dest 所指的内存空间不够大可能会造成缓冲溢出(bufferOverflow)的错误情况在编写程序时需要特别留意或者用strncpy()来取代2.strcpy不会检查src或dest的实际内存边界它只是机械地复制在vs2022中超出边界会程序崩溃3.不能正确处理内存重叠的情况返回值指向dest 字符串的起始地址举个例子int main() { char str1[] Sample string; char str2[8]; char str3[40]; strcpy(str2, str1); strcpy(str3, copy successful); printf(str1: %s\nstr2: %s\nstr3: %s\n, str1, str2, str3); return 0; }strcat函数字符串连接概要原型char *strcat(char *dest, const char *src);功能将一个字符串src追加到另一个字符串dst的末尾包括‘/0’注意1.strcat没有strcpy效率高因为它需要先找到dest指向的字符串的‘/0’的位置2.不处理内存重叠的问题。返回值返回dest举个例子int main() { char* dest new char[10] {assss}; strcat(dest,dddddddd); cout dest endl; }strncpy()函数概要原型char *strncpy(char *dest, const char *src, size_t n);功能strncpy()会将字符串src前n个字符拷贝到字符串destn也表示最多复制n个字符。注意1.不像strcpy()strncpy()不会向dest追加结束标记\0这就引发了很多不合常理的问题。2.如果n大于src的长度会用/0填充dest。3.不能正确处理内存重叠的情况返回值指向dest 字符串的起始地址举个例子int main(void) { char dest3[100] xxxxxxxxxxxxxxxxxxxxxxxxx; const char src3[6] abcxy; int n3 20; strncpy(dest3, src3, n3); return 0; }