原文:
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;
else
cout<<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。