char *strcpy(char *strDest, const char *strSrc)
{
assert((strDest != NULL)&&(strSrc !=NULL));
char *tmp = strDest;
while ((*strDest++ = *strSrc++) !='\0')
{
;//或是 NULL;
}
return tmp;
}
几点说明:
1.注意编程风格,使用strDest, strSrc 这样增强可读性的名字。
2.使用断言来检验输入参数的有效性,如果没有对传入参数strDest和strSrc进行检查,一但它们中有一个为NULL,立死! assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回false,则终止程序执行。可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。
3.使用const来约束strSrc,提高程序的健壮性。如果函数体内的语句试图改动strSrc的内容,编译器将指出错误。
4.strcpy能把strSrc的内容复制到strDest;为什么还需要char *类型的返回值?
这是为了实现链式表达。增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想
例如:
int length = strlen(strcpy(strDest, "hello, world!"));