您的位置:首页 > 其它

只是一个函数的问题strcpy

2015-05-04 16:29 253 查看
char *

strcpy (dest, src)

char *dest;

const char *src;

{

char c;

char *s = (char *) src;

const ptrdiff_t off = dest - s - 1; // 学习了 ptrdiff_t 这个内型,之前还真不知道。就是 一个长 整形,返回一个距离大小。这里不保证指针为空。有意思

do

{

c = *s++;

s[off] = c;

}

while (c != '\0');

return dest;

}

这是glibs代码

下面是 路人甲写的一个代码

// 字符串拷贝函数的实现

char *strcpy(char *dest, const char *src)

{

if ( !dest || !src ) // 应该 检查是否是NULL ,而不是bool 强制转换,有bug

{

return NULL ;

}

if ( dest == src) //有点多余,就像 万里挑一一样,一般不会那么巧

{

return dest ;

}

char *temp = dest ;// 先保存起来。ok 对的

//关键来了

while( (*src) != '/0')

{

*dest = *src;

src++;

dest++;

}

//上面while 有问题吗?

//这里是有错误的,隐藏的很小,很难发觉,这里需要加上 *dest = '\0';不然没法判断到结尾。

dest = temp;

return dest;

}

再看看另一位大侠写的

char *strcpy(char *dest, const char *src)

{

char *p = dest;

while ((*dest++=*src++)!='\0'); // 有问题吗?呵呵 这个跑起来就没问题 因为() 优先级高于 !=,so 他类似去do while 。

return p;

}

但是他也没检查指针,跟glibs 里面一样,这个就要说了,有时候 指针 检查 不一定需要 被调用者来做,调用者 自己也需要去检查。

但这种东西谁说的算?就跟工作一样,他推卸给我,我推卸给别人,有时候都是大家互相体谅。都做好本职工作就好。

由此可见,一个小小函数真是学问多多。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐