函数格式
char *strcpy(char *strDest,const char *strSrc);
为了区别c++中函数库中的strcpy函数,下面使用
char *strcopy(char *strDest,const char *strSrc);
程序代码
#include<iostream>
using namespace std;
char *strcopy(char *strDest,const char *strSrc);
char *strcopy(char *strDest,const char *strSrc)
{
char *address;
address=strDest;
if((NULL==strDest)||(NULL==strSrc))
{
throw "Invalid arguments";
}
while(*strSrc!='\0')
{
*strDest=*strSrc;
strDest++;
strSrc++;
}
*strDest='\0';
return address; //返回字符数组的首地址,该返回值的作用是实现链式表示式
}
int main()
{
char a[]="12345";
char b[25];
char s[]="123456789";
char d[]="123";
strcopy(d,s);
strcopy(b,a);
cout<<a<<","<<b<<endl;
cout<<s<<","<<d<<endl;
return 0;
}
运行结果
结果分析
- 我们可以发现,源字符串s竟然被截断了一部分,原因是当初分配的内存地址是连续的,原来是123\0 123456789\0, strcopy后变成了1234 56789\0 789\0;所以源字符串s由123456789变成了56789。因此在分配空间时要给源字符串和目标字符串留足够的空间
- strcopy能把strSrc的内容复制到strDest,为什么还要char *类型的返回值?原因是为了实现链式表达式,例如:
int length=(strlen(strcopy(strDest,"abcdefg")));