memcpy 和 strcpy 的区别
strcpy: 所需头文件:#include<string.h>
extern char *strcpy(char *dest, const char *src,);
从源src地址开始且含有NULL(‘\0’)结束符的字符串复制到以dest开始的地址空间,函数返回指向dest的指针
strc和des所指内存区域不可以重叠且dest必须有足够的空间来存储src字符串
memcpy: 所需头文件:#include<string.h>
Void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中,函数返回指向dest的指针。
source和destin所指内存区域不能重叠,如果重叠,则函数的行为不确定
memcpy 和 strcpy 的区别:
<1> 复制的内容和可复制的范围不同。strcpy仅能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
<2> 复制的方法和方式不同。strcpy不需要指定的长度,遇到被复制字符的串结束符’\0’才结束,容易溢出;而memcpy则根据第三个参数size_t n决定复制的长度
<3> 用途不同。通常在复制字符串时用strcpy,而复制其他数据类型时一般用memcpy。
<4> 如果初始时destin本身已有数据,执行memcpy后,将从头开始覆盖原有数据,但至多仅能覆盖n个字节。
#include<stdio.h> #include<string.h> int main() { char *s = "Golden Global View"; char k[20], f[20]; char t[20], r[20]; printf("原始字符串:\n"); printf("%s\n\n", s); /*-----------------------------------memcpy-------------------------------------*/ memcpy(k, s, strlen(s)*sizeof(char)+1); // strlen(s) 后 +1 是要取得s字符串中的终止符'\0' printf("将s中的字符串复制到k数组中:\n"); printf("%s\n\n", k); memcpy(f, s+7, 11*sizeof(char)+1); printf("将s中第7个字符开始的11个连续字符复制到f数组中\n"); printf("%s\n\n", f); printf("覆盖的情况,k和f数组的值可以可看上面\n"); printf("\n未+1处理覆盖的情况: "); memcpy(k, f, strlen(f)); printf("%s\n", k); printf("已+1处理覆盖的情况: "); memcpy(k, f, strlen(f)+1); printf("%s\n\n", k); /*----------------------------------strcpy-----------------------------------*/ printf("++++++++++++++++++++++++我是分割线++++++++++++++++++++++++++++++\n\n"); printf("相比之下的strcpy函数:\n\n"); strcpy(t, s); printf("%s\n\n", t); /*strcpy会把dest字符串的终止符也复制进去,这点可以联想到使用memset的情形, 一些人会滥用memset,包括我,所以我才这样说的,比如说在交换两个字符串的时 侯总觉得要在执行strcpy前要先memset一下才觉得放心,这最终会导致效率低下*/ }
Output:
原始字符串:
Golden Global View
将s中的字符串复制到k数组中:
Golden Global View
将s中第7个字符开始的11个连续字符复制到f数组中
Global View
覆盖的情况,k和f数组的值可以可看上面
未+1处理覆盖的情况: Global Viewal View
已+1处理覆盖的情况: Global View
++++++++++++++++++++++++我是分割线++++++++++++++++++++++++++++++
相比之下的strcpy函数:
Golden Global View

更多内容请关注个人微信公众号 物役记 (微信号:materialchains)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?