首先下面是经典的strcpy 实现代码:
#include<cstdio>
#include<iostream>
#include <cassert>
using namespace std;
char *mystrcpy(char* dest,const char * source)
{
assert((source!=NULL)&&(dest!=NULL));
char *newdest=dest;
while((*dest++=*source++)!='\0');
return newdest;
}
int main()
{
char a[3]={'1','2','3'};
char b[3];
mystrcpy(b,a);
printf("%s",b);
return 0;
}
注意的要点:mystrcpy函数要有的返回类型为char *型,作用为帮助以后进行左值调用。
使用assert库函数确保源字符串和目的字符串都不为空。
接下来是strncpy的经典实现:
#include<cstdio>
#include<iostream>
#include <cassert>
#include <cstddef>
using namespace std;
char *mystrcpy(char* dest,const char * source,size_t size)
{
assert((source!=NULL)&&(dest!=NULL));
int i=0;
char *newdest=dest;
while(((*dest++=*source++)!='\0')&&(i++<size));
*(newdest+size)='\0';
return newdest;
}
int main()
{
char a[3]={'1','2','3'};
char b[3];
mystrcpy(b,a,2);
cout<<b<<endl;
return 0;
}