当前位置: 首页 > news >正文

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不会检查srcdest的实际内存边界,它只是机械地复制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不会检查srcdest的实际内存边界,它只是机械地复制,在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个字符拷贝到字符串dest,n也表示最多复制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; }

http://www.jsqmd.com/news/1167359/

相关文章:

  • HMCL启动器:跨平台Minecraft模组管理的免费高效解决方案
  • Three.js 体积渲染在链上数据可视化中的应用:体素化与 Ray Marching 实践
  • 终极Windows 11界面定制解决方案:ExplorerPatcher深度技术解析
  • 亨得利官方名表服务中心|完整地址及官方电话权威信息通知(2026年7月最新) - 亨得利官方博客
  • Go 链路追踪采样:AI 推理服务高频调用下,全量采样反而拖慢推理延迟
  • 技术深度解析:Decky Loader插件生态的系统故障排除与优化策略
  • 如何快速检测Windows热键冲突:Hotkey Detective实用指南
  • CVE-2022-23366漏洞复现:从SQL注入原理到BurpSuite与SQLMap实战
  • 【限时开放】ChatGPT企业Prompt模板认证计划:通过即授ISO/IEC 23894合规标识(仅剩最后23个席位)
  • OpCore Simplify:三分钟完成黑苹果OpenCore EFI配置的智能工具
  • 2026桂林靠谱防水服务商:卫生间免砸砖、外墙、地下室、楼顶渗漏维修 本地正规报价(7月最新) - 吉林同城获客
  • 2026郑州黄金回收靠谱商家推荐 上门回收无隐形扣费 - 奢侈品回收评测
  • 欧米茄回收价格查询与靠谱平台实测排行(2026年7月最新) - 欧米茄官方服务中心
  • 2026年昆明二手手机选购指南:口碑好的服务商揭秘 - GrowUME
  • 网易云音乐格式解锁:3步实现NCM到MP3的本地转换方案
  • Gadgetbridge终极指南:开源智能设备管理完全解决方案
  • 终极免费风扇控制软件FanControl:5分钟打造个性化散热方案
  • 如何高效解决Steam Deck Windows兼容性问题:专业驱动适配方案
  • 直播实时MV生成技术:从音视频处理到实时视觉增强实践
  • 中山窗帘选购全攻略|四大专业窗帘市场深度测评,本土优选莲花生软装 - 小布之大布
  • 青海 CPPM 报名授权(众智商学院)课程中心 - 众智商学院cppm官方
  • 2026年7月最新泰州美度官方售后客服服务电话及地址网点大全 - 亨得利钟表维修中心
  • 5分钟掌握YaeAchievement:原神成就数据导出终极指南
  • 3分钟快速掌握本地Cookie导出:Get cookies.txt LOCALLY终极指南
  • 2026年真人数字人制作平台怎么选?深度横评与选型方案全解析 - SNKXD
  • 2026万宁黄金回收市场实测解析|县域滨海城市交易特点、民俗变现误区与正规渠道甄选指南 - 天天开心12
  • Windows APK安装器:3分钟在电脑上安装Android应用的终极方案
  • STM32与TC78H651AFNG驱动直流有刷电机方案解析
  • 为什么选择Proxmox-Enhanced-Configuration-Utility?10个让Proxmox管理更简单的理由
  • Claude Code写测试用例到底靠不靠谱?实测对比JUnit+Mockito手动编写,覆盖率提升47%的真相揭晓