要求:不使用c++/c的字符串库函数,实现strcpy函数
最易想到的方法:
void my_strcpy(char *dest, char *src)
{
while (*src != '\0')
{
*dest++ = *src++;
}
*dest = *src; //将'\0'拷贝过去
}
由此可见此代码还可进行简单优化:
void my_strcpy(char *dest, char *src)
{
while (*dest++ = *src++)
{
;
}
}
若传入一个空指针,那么编译程序崩溃,*dest++解引用失败,优化方案如下:
void my_strcpy(char *dest, char *src)
{
if (dest == NULL || src == NULL)
{
return;
}
while (*dest++ = *src++)
{
;
}
}
此时发现每次都要判断dest,src是否为空,降低了效率;并且strcpy函数的返回类型是char*,对此还可再次优化:
char* my_strcpy(char *dest,const char *src)
{
char *ret = dest;
assert(dest != 0);
assert(src != 0);
while (*dest++ = *src++)
{
;
}
return ret;
}
至此做到这一步代码基本没问题了
最后加上一个测试代码,完成strcpy函数的实现
int main()
{
char buf[10] = { 0 };
char *p = buf; //char *p = NULL;
my_strcpy(p, "hehe");
printf("%s\n", buf);
system("pause");
return 0;
}
注意:在使用assert函数时应引用相应头文件#include<assert.h>
。