strcpy的实现

来源:互联网 发布:大学生网络购物论文 编辑:程序博客网 时间:2024/05/15 13:26
这个号称面试必考,来总结一下
 char *strcpy1(char *dest, const char *src)
{
  int i = 0;
  while(src[i])
    dest[i++] = src[i];
  dest[i] = '/0';

  return dest;
}
循环中访问3个变量
char *strcpy2(char *dest, const char *src)
{
char *p = dest;
while (*src)
*dest++ = *src++;
*dest = /0;
return p;
}
优化取消变量i

char *strcpy3(char *dest, const char *src) {
    const char *end = src;
    char *p = dest,
    while (*end)
        end++;
    end++;
    while ((long *)src + 1 <= (long *)end)
        *((long *)dest)++ = *((long *)src)++;
    while (src <= end)
        *dest++ = *src++;
    return p;
}
第一个循环得到src长度,第二个循环每次复制4byte,最后不满4byte的部分逐个复制。
void strcpy(char *strDest, const char *strSrc)
{
 assert( (strDest != NULL) && (strSrc != NULL) );
 while( (*strDest++ = * strSrc++) != ‘/0’ );
}
点评:参数strSrc声明为const,表示输入参数。对Src和Dest判断是否为NULL。在字符串操作函数中,通常首先要判断字符串是否为空,也就是assert()!=NULL。
但是没有考虑越界问题,如果Dest的长度小于Src的长度就会出错。应该如何检查?strlen在这里没有用,所以strncpy明确指出要复制的字符串长度。可是仍然没有保证Dest空间足够。
原创粉丝点击