strcpy与memcpy的区别

来源:互联网 发布:linux yum命令有什么用 编辑:程序博客网 时间:2024/05/01 15:20

原文:

http://blog.chinaunix.net/uid-23922099-id-3555928.html

#include<iostream>using namespace std;char * strcpy(char * strDest, const char * strSrc) // 实现strSrc到strDest的复制{if ((strDest == NULL) || (strSrc == NULL)) //判断参数strDest和strSrc的有效性{return NULL;}char *strDestCopy = strDest;        //保存目标字符串的首地址while ((*strDest++ = *strSrc++)!='\0'); //把strSrc字符串的内容复制到strDest下return strDestCopy;}int getStrLen(const char *strSrc)         //实现获取strSrc字符串的长度{int len = 0; //保存长度while(*strSrc++ != '\0')             //循环直到遇见结束符'\0'为止{len++; }return len;};int main(){char strSrc[] = "Hello World!";       //要被复制的源字符串char strDest[20];                  //要复制到的目的字符数组int len = 0;                       //保存目的字符数组中字符串的长度len = getStrLen(strcpy(strDest, strSrc)); //链式表达式,先复制后计算长度printf("strDest: %s\n", strDest);printf("Length of strDest: %d\n", len);return 0;}




#include<iostream>#include<assert.h>using namespace std;void *memcpy1(void *memTo, const void *memFrom, size_t size){assert((memTo != NULL) && (memFrom != NULL)); //memTo和memFrom必须有效char *tempFrom = (char *)memFrom;             //保存memFrom首地址char *tempTo = (char *)memTo;                  //保存memTo首地址while(size -- > 0)                //循环size次,复制memFrom的值到memTo中*tempTo++ = *tempFrom++ ; return memTo;}void print(char c)//打印字符的每一位{char temp=0x01;for(int i=7;i>=0;i--){if(  (c&(temp<<i)) !=0)//优先级从左到右减小:1、!=2、<<、>>3、&cout<<1;elsecout<<0;}cout<<endl;}int main(){unsigned char strSrc[] = "Hello World!";    //将被复制的字符数组unsigned char strDest[20];               //目的字符数组memcpy1(strDest, strSrc,4);    //复制strSrc的前4个字符到strDest中strDest[4] = '\0';                //把strDest的第5个元素赋为结束符'\0'printf("strDest: %s\n", strDest);return 0;}

strcpy和memcpy主要有以下3方面的区别。
复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
复制的方法不同。strcpy不需要指定长度,它遇到字符串结束符"\0"便结束。memcpy则是根据其第3个参数决定复制的长度。
用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy。



0 0
原创粉丝点击