注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Kandy

长风破浪会有时,直挂云帆济沧海!

 
 
 

日志

 
 

memset ,memcpy 和strcpy 的异同  

2009-06-19 17:27:32|  分类: C++知识点 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

strcpy

 原型:extern char *strcpy(char *dest,char *src);

 用法:#include <string.h>

 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。

 说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

       返回指向dest的指针。只能用于字符串复制,并且遇到"\0"结束。

例: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));将a内的元素都设置为"\0"。

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不需要。

  评论这张
 
阅读(99)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017