strcpy和memcpy的区别

张开发
2026/4/5 1:58:17 15 分钟阅读

分享文章

strcpy和memcpy的区别
strcpy和memcpy是 C 语言中两个常用的内存/字符串拷贝函数它们的核心区别如下1. 核心目的不同strcpy专门用于拷贝字符串。它以\0空字符作为字符串结束的标志。memcpy通用内存拷贝函数。它直接按字节数拷贝内存不关心内容是什么不关心\0。2. 参数不同char *strcpy(char *dest, const char *src); void *memcpy(void *dest, const void *src, size_t n);strcpy不需要指定长度它一直拷贝直到遇到源字符串的\0。memcpy需要显式指定要拷贝的字节数n。3. 对\0的处理方式最核心区别函数遇到\0的行为是否拷贝\0strcpy停止拷贝会拷贝\0到目标内存memcpy无视\0继续按指定长度拷贝取决于长度参数是否覆盖到\0举例说明char src[] ABC\0DEF; // 实际上只有 ABC 可见 char dest[10]; strcpy(dest, src); // dest 结果为 ABC后面自动补 \0 memcpy(dest, src, 7); // 将 ABC\0DEF 共7字节完整拷贝到 dest4. 安全性strcpy不安全不检查目标缓冲区大小若源字符串长度超过目标缓冲区会发生缓冲区溢出。推荐使用strncpy或strcpy_s。memcpy需要谨慎若源和目标内存区域重叠行为是未定义的此时应用memmove。另外长度参数n如果超出目标大小也会溢出。5. 返回值与数据类型strcpy返回char*目标地址方便链式调用。memcpy返回void*目标地址可用于任何数据类型int、struct等。6. 典型使用场景场景推荐函数拷贝字符串知道是字符串以\0结尾strcpy/strncpy拷贝任意二进制数据如结构体、整数数组、图片数据memcpy拷贝部分字符串指定长度不管中间是否有\0memcpy拷贝可能含\0的二进制协议数据memcpy总结一句话strcpy是“遇\0停止”的字符串拷贝器memcpy是“指定长度”的原始内存拷贝器不关心\0。

更多文章