微软自带的strcpy函数: (不完善,4分)
-
char * strcpy(char * dest,const char *src)
-
{
-
char *tmp = dest;
-
-
while ((*dest++ = *src++) != ‘\0‘)
-
-
return tmp;
-
}
最完善的strcpy函数: (推荐使用,10分)
-
char * strcpy( char *dest, const char *src )
-
{
-
if(dest == src)
-
{
-
return dest;
-
}
-
-
assert( (dest != NULL) && (src != NULL) );
-
-
char *tmp = dest;
-
-
while( (*dest++ = * src++) != ‘\0‘ );
-
-
return tmp;
-
-
}
推荐的原因:(看得分点)
-
-
void strcpy( char *dest, char *src )
-
{
-
while( (*dest++ = * src++) != ‘\0‘ );
-
}
-
-
-
void strcpy( char *dest, const char *src )
-
{
-
-
while( (*dest++ = * src++) != ‘\0‘ );
-
}
-
-
-
void strcpy(char *dest, const char *src)
-
{
-
-
assert( (dest != NULL) && (src != NULL) );
-
while( (*dest++ = * src++) != ‘\0‘ );
-
}
-
-
-
-
char * strcpy( char *dest, const char *src )
-
{
-
assert( (dest != NULL) && (src != NULL) );
-
char *tmp = dest;
-
while( (*dest++ = * src++) != ‘\0‘ );
-
return tmp;
-
}
-
-
-
-
char * strcpy( char *dest, const char *src )
-
{
-
if(dest == src) { return dest; }
-
assert( (dest != NULL) && (src != NULL) );
-
char *tmp = dest;
-
while( (*dest++ = * src++) != ‘\0‘ );
-
return tmp;
-
}
assert总结
assert"断言"的理解及使用:
a. 断言,也即做出一些假设,假设该表达式是正确的,若程序运行正确,该断言程序成立;若断言的表达式不成立,程序运行一定会出错,整个程序就会退出。多用于Debug调试,且能快速定位错误位置;
assert(表达式);
如果表达式的值为假,整个程序将退出,并输出一条错误信息。如果表达式的值为真则继续执行后面的语句。
b. assert是宏,而不是函数,使用这个宏需要添加头文件 #include
<assert.h>
c. assert 与 if的区别:
if : 条件成立继续执行、条件不成立也继续执行。
assert:条件成立继续执行、 条件不成立停止执行 。
简单例子测试,对除数为0进行断言演示

补充——strcpy函数使用易错点

strcpy函数的最优实现方法
原文:http://blog.csdn.net/agoogleboy/article/details/40951979