memset ,memcpy 和strcpy 的根本区别

银河麒麟(ky10)x86与arm双架构下编译zlmediakit的实战指南 本文提供了在银河麒麟(ky10)操作系统上,针对x86与arm双架构编译部署流媒体服务器zlmediakit的完整实战指南。文章详细阐述了从环境准备、依赖安装、代码获取到编译构建与测试的全过程,重点解析了两种CPU架构下的关键差异与注意事项,帮助开发者高效完成国产化平台上的流媒体服务搭建。 阅读详情
 
memset ,memcpy 和strcpy 的根本区别
2009年10月27日 星期二 上午 10:46
以下内容为网络整理的结果!


它们用处不同,但大部分情况下可以完成相同的要求。

strcpy

原型:extern char *strcpy(char *dest,char *src);
用法:#include <string.h>
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
返回指向dest的指针。

例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字符串长度(第一个‘\0’之前)是否超过50位,如超过,则会造成b的内存地址溢出。

memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。可以拿它拷贝任何数据类型的对象。

举例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),会造成b的内存地址溢出。

memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#include <string.h>
功能:把buffer所指内存区域的前count个字节设置成字符c。
说明:返回指向buffer的指针。用来对一段内存空间全部设置为某个字符。

举例:char a[100];memset(a, '\0', sizeof(a));

memset可以方便的清空一个结构类型的变量或数组。

如:
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};

对于变量
struct sample_strcut stTest;

一般情况下,清空stTest的方法:
stTest.csName[0]='\0';
stTest.iSeq=0;
stTest.iType=0;

用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));

如果是数组:
struct sample_struct TEST[10];
则
memset(TEST,0,sizeof(struct sample_struct)*10);

对这个问题有疑问,不是对函数的疑问,而是因为没有弄懂mem和str的区别。
mem是一段内存,他的长度,必须你自己记住
str也是一段内存,不过它的长度,你不用记,随时都可以计算出来
所以memcpy需要第三个参数,而strcpy不需要

void* memcpy(void* pvTo, const void* pvForm, size_t size)
{
assert((pvTo!= NULL) && (pvFrom!= NULL));//使用断言防止传递空地址
unsigned char* pbTo = (unsigned char*)pvTo;//防止改变pvTo的地址
unsigned char* pbFrom = (unsigned char*)pvFrom;//防止改变pvFrom的地址
while(size-- > 0)
{
   *pbTo++ = *pbFrom++;
}
return pvTo;
}

char* strcpy(char* pDest, const char* pSrc)
{
assert((pDest != NULL) && (pSrc != NULL));
char *pTmp = pDest;
while ((*pDest++ = *pSrc++) != '\0')
   ;
return pTmp;
}

posted on 2008-04-22 09:51 水 阅读(2662) 评论(2) 编辑 收藏 引用 所属分类: c/c++基础知识


FeedBack:
# re: memcpy与strcpy实现
2008-08-27 20:35 | temp
do not forget const   回复   更多评论
  
# re: memcpy与strcpy实现
2009-07-23 22:10 | flame

//注意数据重叠区的处理。
// |----------|
// |----------|

void *MyMemCopy(void *dest,const void *src,size_t count)
{
char *pDest=static_cast<char *>(dest);
const char *pSrc=static_cast<const char *>(src);

//注意,这里是关键,为什么要这样比较呢?理由何在?
if( pDest>pSrc && pDest<pSrc+count )
{
for(size_t i=count-1; i>=0; --i)
{
pDest[i]=pSrc[i];
}
}
else
{
for(size_t i=0; i<count; ++i)
{
pDest[i]=pSrc[i];
}
}

return pDest;
}

//注意数据重叠区的处理。
// |----------|
// |----------|

void *MyMemCopy(void *dest,const void *src,size_t count)
{
char *pDest=static_cast<char *>(dest);
const char *pSrc=static_cast<const char *>(src);

//注意,这里是关键,为什么要这样比较呢?理由何在?
if( pDest>pSrc && pDest<pSrc+count )
{
for(size_t i=count-1; i>=0; --i)
{
pDest[i]=pSrc[i];
}
}
else
{
for(size_t i=0; i<count; ++i)
{
pDest[i]=pSrc[i];
}
}

return pDest;
}


①电子产品拆解分析-暖手宝 电子产品拆解分析-暖手宝 ①按键三档调温暖手; ②长按进入氛围呼吸灯; ③安卓接口充电以及支持USB输出; 阅读详情

相关推荐

Pixel 5 Root, 安装Xposed框架, 解锁5G教程

Pixel 5 5G手机root 教程 前几天买的手机终于到货了,现在又开始折腾了,经过我的努力,现在已经拥有root权限了。

Ender_Zhao的博客 3万+

memset()函数与memcpy()函数知识总结---结构体中有指针变量

memset()函数与memcpy()函数知识总结—结构体中有指针变量 当自定义结构体中指针对象时,在使用memset()函数和memcpy()函数时需要十分小心,稍不留神就会产生错误调用。 memcpy()函数 1.直接使用memcpy()函数复制结构体,若不对stTT2.p分配空间,memcpy复制stTT1.p的地址给stTT2.p,若对stTT2.p分配空间,复制后该空间仍会被覆盖。如图,...

Sheldon1990的博客 8181

USB PD Sink HUSB238A可应用于24V电动风扇/电动工具

HUSB238A在I2C模式下,可申请PD3.1 EPR AVS功率,可申请24V电压直接给电机供电

Hynetek的博客 759

内存函数(memcpy、memmove、memset、memcmp)

内存函数保姆级教程(memcpy、memmove、memcmp、memset)包理解哦

weixin_73450183的博客 3796

智能音箱开发者必看:CEVA-BX vs Cadence HiFi音频DSP实战选型指南(附功耗对比表)

本文深入对比了CEVA-BX和Cadence HiFi两大音频DSP架构在智能音箱开发中的性能差异,涵盖语音唤醒、多麦克风阵列处理等核心场景。通过实测数据和功耗对比表,为开发者提供选型参考,帮助优化产品性能和能效表现。

weixin_29309213的博客 226

uniapp运行钉钉小程序

因项目原因,公司需要在钉钉里面开发小程序。之前用uniapp开发过app,H5,小程序。还真没尝试过钉钉小程序,今天就简单的记录下uniapp运行钉钉小程序中的过程。

YL 2919

memcpy()与memset()

一、memcpy 1、memcpy用法: void *memcpy(void *dest, const void *src, size_t n); 头文件:C语言需要包含头文件string.h;C++需要包含cstring 或 string.h。 用法:用来将src地址处的内容拷贝n个字节的数据至目标地址dest指向的内存中去。 返回值:函数返回指向dest的指针。 示例1: 作用:将s中的字符串复制到字符数组d中 #include <stdio.h> ...

weixin_49713302的博客 3917

ZYNQ系列PS侧和PL侧DDR3或DDR4在AD(Altium Designer 25)中的layout布线规则约束

DDR3或DDR4的PCB布线规则通常有相对固定的要求,对应的,在PCB设计时有固定的约束设置。

FPGA艺术家的博客 787

linux中memset的正确用法

【起因】希望对各种类型的数组进行初始化,避免野值 【函数头文件】提示:在linux中可以在terminal中输入 "man memset"进行查询 #include&lt;string.h&gt; void *memset(void *s, int c, size_t n); 【使用说明】The memset() function fills the first n byt...

whusl的专栏 757

全新YOLO26有效涨点改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

🔥《2026年YOLO26改进专栏》🔥 🚀持续更新500+最前沿创新改进点(顶会顶刊论文/独家创新策略),涵盖主干网络、各种卷积、注意力机制、检测头等模块,助力科研论文发表与模型性能提升,支持检测/分割/分类任务。订阅即获完整可运行项目,提供专业QQ答疑群,适合科研发论文(SCI/CCF/核心)及工业应用(PCB/医学/遥感检测)。专栏价格将逐步上涨,早订更优惠! ⭐特色:非计算机专业友好、模块可自由组合、全网独家创新;📌适用:研究生大论文和小论文创新、小目标检测、多领域科研应用,满足不同研究需求。

Ai缝合怪、助力小伙伴高效发论文 5129

Apollo Planning2.0决策规划算法代码详细解析 (1):环境搭建

1、官方提供连接:git clone https://github.com/ApolloAuto/application-pnc.git。此外,也更新了dreamview对pnc的支持,使得调试更加方便。apollo开源团队近期更新了planning版本,对代码进行了一定程度上的重构。(2)进入docker,并编译整个工程:./apollo.sh build_dbg。下载项目环境后使用aem进行环境配置;2、有一定基础建议直接拉取最新代码,自己手动进行编译。(1)环境安装: ./dev_start.sh。

自动驾驶Player的博客 1840

memcpy/memset

1.memcpy memcpy是内存拷贝函数,原型为: void *memcpy(void *dest, )

miao65272156的专栏 512

MobSF-v3源代码分析(一)

移动安全框架(MobSF)是一种自动化的移动应用程序(Android/iOS/Windows)测试框架,能够执行静态、动态和恶意软件分析。 它可用于Android、iOS和Windows移动应用程序的有效和快速安全分析,并支持二进制文件(APK,IPA和APPX)和压缩源代码。 MobSF可以在运行时为Android应用程序进行动态应用程序测试,并具有由CapFuzz(一种特定于Web API的安全扫描程序)提供支持的Web API模糊测试。MobSF旨在使您的CI/CD或DevSecOps管道集成无缝。

武天旭的博客 8960

C++:memset ,memcpy 和strcpy 的根本区别(转)

转自:https://blog.youkuaiyun.com/stock888/article/details/3930847 C++:memset ,memcpy 和strcpy 的根本区别(转) #include "memory.h" memset用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, '/0', siz...

qq_37871669的博客 237

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

memset ,memcpy 和strcpy 的根本区别?

http://www.cppblog.com/junfeng568/archive/2006/03/11/4022.html Memset  用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘\0’; 例:char a[100];memset(a, '\0', sizeof(a));      memset可以方便的清空一个结构类型的变量或数组。

JUNGOU1的专栏 425

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

memset ,memcpy 和strcpy 的根本区别?

这次在工作上分别遇到过strcpy、memset、memcpy,也在网络上看到过一些关于三者区别的文章,罗列大概内容如下: strcpy()来自C语言,在C++里得以保留。首先,要指明的是,C++里strcpy()里接受的参数是C-串,并非string,更不可能是其他类型的数据。它表示一个字串的内容拷贝到另一个字串。拷贝会在源字串里第一个'\0'时停止拷贝. strcpy(目标字串,源字串);

ykm0722的专栏 1226

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

strcpy,memset,memcpy三者之间的根本区别

1.strcpy的用法    strcpy的作用是拷贝字符串,当它遇到'\0'时结束拷贝,原型为:extern char *strcpy(char *dest,char *src); 就是把src的字符串复制到dest中,例如: #include #include void main(){ char a[20],c[]="i am teacher!";

记事本 3274

Strcpy,memcpy,memset的根本区别

strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。     返回指向dest的指针。 例:char a[100],b[50];strcp

rong1234rong的专栏 378

memset ,memcpy ,memmove,strcpy 的根本区别 与实现

memset ,memcpy ,memmove,strcpy 的根本区别 与实现 memset ,memcpy ,memmove,strcpy 的根本区别 与实现 - 邓维 - 博客园memset ,memcpy ,memmove,strcpy 的根本区别 与实现...

174
上一篇: 超强的指针学习笔记
下一篇: GDB查看变量
junecau
博客等级 码龄19年 125粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值