字符串拷贝函数:
重要度:★★★★★
原 型:
char *strcpy( char *strDestination, const char *strSource );
实 现:
1、直接实现功能,没有任何检查和容错处理。
char *MyStrcpy( char *strDest, const char *strSrc) {
char *strReturn = strDest;
while( *strSrc != '\0')
*strDest++ = *strSrc++;
*strDest = '\0';
return strReturn; //返回原始值,支持链式操作
}
此时,如果传入参数为NULL,标准strcpy函数不拷贝,而MyStrcpy出现异常。故应增加对参数是否为空的判断。
2、
char *MyStrcpy( char *strDest, const char *strSrc) {
assert( (strDest != NULL) && (strSrc != NULL));
char *strReturn = strDest;
while( *strSrc != '\0')
*strDest++ = *strSrc++;
*strDest = '\0';
return strReturn; //返回原始值,支持链式操作
}
3、根据网文,优化了一下代码:
char *MyStrcpy( char *strDest, const char *strSrc) {
assert( (strDest != NULL) && (strSrc != NULL));
char *strReturn = strDest;
while( (*strDest++ = *strSrc++ ) != '\0' );
return strReturn; //返回原始值,支持链式操作
}
此时,对于字符数组(不含'\0'结尾),MyStrcpy拷贝还是有问题的,由于找不到结束标记,会一直拷贝,直到内存中的值恰巧为‘\0’。对于strDest溢出,亦不能判断。总之,这个函数是不安全的。