strcpy和memcpy和strcpy的实现的区别

Strcpy,memcpy,memset的根本区别
这几天一直研究C语言,发现好多知识都忘了,而且还容易混淆,郁闷之余就只有上网逛逛啦!呵呵,发现了一些有用的东西,现在在此和大家分享哦。
原型:extern char *strcpy(char *dest,char *src);
用法:#include &string.h&
功能:把src所指由NULL结束的字符串复制到dest所指的数组中。
说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。
& & 返回指向dest的指针。
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的内存地址溢出。
原型: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];
struct sample_strcut stT
一般情况下,清空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和memcpy的区别_百度知道
strcpy和memcpy的区别
我有更好的答案
strcpy和memcpy的区别strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。void *memcpy( void *dest, const void *src, size_t count );char * strcpy(char * dest, const char * src) // 实现src到dest的复制{  if ((src == NULL) || (dest == NULL)) //判断参数src和dest的有效性  {       return NULL;  }  char *strdest =
//保存目标字符串的首地址  while ((*strDest++ = *strSrc++)!='\0'); //把src字符串的内容复制到dest下  }void *memcpy(void *memTo, const void *memFrom, size_t size){  if((memTo == NULL) || (memFrom == NULL)) //memTo和memFrom必须有效
return NULL;  char *tempFrom = (char *)memF
//保存memFrom首地址  char *tempTo = (char *)memTo;
//保存memTo首地址
  while(size -- & 0)
//循环size次,复制memFrom的值到memTo中
  *tempTo++ = *tempFrom++ ;   return memTo;}strcpy和memcpy主要有以下3方面的区别。1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符&\0&才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy
采纳率:95%
来自团队:
strcpy是拷贝字符串,以\0为标志结束(即一旦遇到数据值为0的内存地址拷贝过程即停止)strcpy的原型为char *strcpy(char *dest, const char *src)而memcpy是给定来源和目标后,拷贝指定大小n的内存数据,而不管拷贝的内容是什么(不仅限于字符)memcpy的原型为void *memcpy(void *dest, const void *src, size_t n);
为您推荐:
其他类似问题
memcpy的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C语言中memcpy和strcpy区别_Linux编程_Linux公社-Linux系统门户网站
你好,游客
C语言中memcpy和strcpy区别
来源:Linux社区&
作者:hzwy23
C语言中memcpy和strcpy区别
1.在使用strcpy函数拷贝字符串时,遇到&\0'时,将停止拷贝。
2.在使用memcpy函数拷贝内存中数据时,最后一个参数决定拷贝的字节数.
3.memcpy[2]中的到底是什么呢?答案是:'\0' 。由于'\0'表示字符串结束符,是一个转义字符,转义字符是ASCII码中不可打印的字符,要想输出'\0',可以使用\\0
#include &stdio.h&#include &string.h&int main(int argc,char** argv){ & & & & int i = 0; & & & & char buf[5] = {'1','2','\0','4','5'};& & //定义一个数组,其中'\0'表示字符串的结束符。 & & & & char stcpy[5];& &
& & & & memset(stcpy,0,10);& & & & & & & & & & & //清零数组 & & & & strcpy(stcpy,buf); & & & & printf("use strcpy: "); & & & & for(i = 0; i & 5; i++) & & & & & & & & putchar(stcpy[i]);& & & & & & &
//输出信息为:use strcpy : 12& & & & putchar('\n');& & & &
& & & & char mcpy[5]; & & & & memcpy(mcpy,buf,5); & & & & printf("use memcpy: "); & & & & for(i = 0; i & 5; i++) & & & & & & & & putchar(mcpy[i]);& & & & & & & & //输出信息为: use memcpy:1245& & & & putchar('\n');& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & if(mcpy[2] == '\0') & & & & & & & & printf("\\0 \n");& & & & & & & & //输出信息为 \0 return 0;}
相关资讯 & & &
& (02月26日)
& (12/27/:56)
& (05月09日)
& (12/28/:34)
& (11/22/:35)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款strcpy,memset,memcpy三者之间的根本区别
1.strcpy的用法
strcpy的作用是拷贝字符串,当它遇到'\0'时结束拷贝,原型为:extern char *strcpy(char *dest,char
就是把src的字符串复制到dest中,例如:
#include&string.h&
#include&iostream.h&
void main(){
char a[20],c[]="i am teacher!";
strcpy(a,c);
cout&&a&&}
此小例子中,char c[]={'i',' ','a','m',' ','t','e','a','c','h','e','r','\0'};字符串一般默认后面有一个结束符,
当用到strcpy(a,c);函数时,把c中的字符串复制到a中,当遇到字符串中默认的结束符后,复
2.memcpy的用法
memcpy用来做内存拷贝,可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;
原型函数为void *memcpy(void *dest, const void *src, size_t n);其中dest为返回的值。功能是从源src
所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置。
例如:#include &stdio.h&
#include &string.h&
int main()
char *s="Golden Global View";//此字符串总共有18个字符,再加上一个结束符,总共存放19个字符
char d1[20],d2[20];
memcpy(d1,s,(strlen(s)+1));//用memcpy函数,把s中字符串的首地址拷贝到d中,连续复制19个字符
memcpy(d2,s+14,5); //从第14个字符(V)开始复制,连续复制4个字符(View)
printf("%d\n",strlen(s));
printf("%s\n",d1);
printf("%s\n",d2);
3.memset的用法
memset的作用是对一段内存空间全部设置为某个字符,常用在内存空间的初始化,其原型函数为
void *memset(void *s,int c,size_t n);就是把已开辟内存空间s的首n个字节设置为c。
例如#include &stdio.h&
#include &memory.h&
#include &string.h&
int main()
char s[]="Golden Global View";
memset(s,'G',6);//把s中的前6个字符改成G,也就是把Golden改成GGGGGG
printf("%s\n",s);//输出为GGGGGG Global View
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!浅析C++中memset,memcpy,strcpy的区别
转载 &更新时间:日 08:48:47 & 作者:
本篇文章是对C++中memset,memcpy,strcpy的区别进行了详细的分析介绍,需要的朋友参考下
代码如下:#include &stdio.h&#include &stdlib.h&#include &string.h&#include &assert.h&//memcpy:按字节复制原型:extern void* memcpy(void *dest,void *src,unsigned int count)//功能:由src所指内存区域复制count个字节到dest所指的内存区域;//同strcpyvoid *memcpy_su(void *dest, void *src, unsigned int count){&&&&&& assert ((dest!=NULL)&&(src!=NULL));&&&&&& char* bdest = (char*)&&&&&& char* bsrc = (char*)&&&&&& while(count--&0)&&&&&&& *bdest++ = *bsrc++;&&&&&&}//strcpy:复制字符串,遇到'\0'就结束//原型:extern char *strcpy(char *dest,char *src)//功能:把src所指由'\0'结束的字符串复制到dest所指的数组中;//说明:src和dest所指内存区域是不可以重叠的且dest必须有足够的空间来容纳字符串。返回dest指针。char *strcpy_su(char *dest,char *src){&&&&&& assert((dest!=NULL)&&(src!=NULL));&&&&&& char *address =&&&&&& while((*dest++=*src++)!='\0')&&&&&&&&&&&&&&&&&&&}//memset:设置buffer所指的内存区域的前count个字节,用字符c来代替//原型:extern void *memset(void *buffer,int c,int count);&void *memset_su(void *buffer, int c, int count){&& assert ((buffer!=NULL));&& char* buffer2 = (char*)&& while(count--&0)&&&&&&& *buffer2++ =&&&&&&}void main(){&&&&&& char str1[100]="abchjhgjghjgjgh";&&&&&& char str2[50]="efghdfkdjf";&&&&&& strcpy(str1, str2);&&&&&& printf("%s\n",str1);&&&&&&& char a[3];&&&&&& memset(a, 'a', sizeof(a)-1);&&&&&& memset(&a[2], '\0',1);&&&&&& printf("%s\n",a);&&&&& &&&&&& memcpy(str1, str2, strlen(str2));&&&&&& printf("%s\n",str1);}
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 memmove memcpy区别 的文章

 

随机推荐