memset ,memcpy 和strcpy 的根本区别?

原创 2006年06月13日 17:03:00
它们用处不同,但大部分情况下可以完成相同的要求。
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不需要

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

1.strcpy的用法    strcpy的作用是拷贝字符串,当它遇到'\0'时结束拷贝,原型为:extern char *strcpy(char *dest,char *src); ...
  • educast
  • educast
  • 2013年10月23日 13:15
  • 1213

C/C++ memset的作用以及memcpy和strcpy的区别

参考:http://baike.baidu.com/link?url=LyptIIh9GOU0RUvnyyhKk1X8fW6V8iRWqvTe-qIPNvNQrya0eDKvugmxWo5p7juyd...
  • u012005313
  • u012005313
  • 2015年08月26日 17:04
  • 1287

strcpy和memcpy的区别

void *memcpy(void *dest, const void *src, int n); 从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中 #inc...
  • u014082714
  • u014082714
  • 2015年03月14日 11:59
  • 3270

strcpy与memcpy的区别

strcpy C语言标准库函数 原型声明:extern char *strcpy(char* dest, const char *src); 头文件:#include string.h> 功能...
  • peter_teng
  • peter_teng
  • 2013年07月08日 18:19
  • 6602

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

1.strcpy的用法    strcpy的作用是拷贝字符串,当它遇到'\0'时结束拷贝,原型为:extern char *strcpy(char *dest,char *src); 就是把s...
  • chenyu19880302
  • chenyu19880302
  • 2013年07月10日 20:58
  • 706

memcpy和strcpy区别以及它们的效率分析

1、首先介绍这两个函数的原型: #include char *strcpy( char *to, const char *from ); #include void *memc...
  • vgxpm
  • vgxpm
  • 2015年08月13日 17:46
  • 2688

memset()与memcpy()函数及其作用

1. memset()函数原型是extern void *memset(void *buffer, int c, int count)        buffer:为指针或是数组,         ...
  • huliqi789
  • huliqi789
  • 2016年07月03日 01:05
  • 3214

Memset、Memcpy、Strcpy 的作用和区别

(1)Memset   原型:  extern void *memset(void *buffer, int c, int count);                用法:  #include...
  • u012425536
  • u012425536
  • 2014年03月27日 09:46
  • 279

Memset、Memcpy、Strcpy 的作用和区别

1. Memset    原型:   extern void *memset(void *buffer, int c, int count);                 用法:  #in...
  • hyk0601
  • hyk0601
  • 2016年07月13日 11:34
  • 100

内存重叠之strcpy/strncpy/strcat/strncat和memcpy---我又踩到地雷了

前面, 我们说过, strcpy是一个非常不安全的函数, 如果大家在项目中
  • stpeace
  • stpeace
  • 2014年09月21日 23:03
  • 4791
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:memset ,memcpy 和strcpy 的根本区别?
举报原因:
原因补充:

(最多只允许输入30个字)