首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于经典笔考题目strcpy的一个小疑问

2013-08-01 
关于经典笔试题目strcpy的一个小疑问实现strcpy是一个经典的笔试题,大家应该都看过,但GNU-C中的实现如下:

关于经典笔试题目strcpy的一个小疑问
实现strcpy是一个经典的笔试题,大家应该都看过,
但GNU-C中的实现如下:
 
 char* strcpy(char *d, const char *s)
 {
   char *r=d;
   while((*d++=*s++));
   return r;
 }
 

为什么这里就不需要检查指针的有效性?

[解决办法]
底层简洁高效为佳,但还是得看实现
glibc2.5


/* Copy SRC to DEST.  */
char *
strcpy (dest, src)
     char *dest;
     const char *src;
{
  reg_char c;
  char *__unbounded s = (char *__unbounded) CHECK_BOUNDS_LOW (src);
  const ptrdiff_t off = CHECK_BOUNDS_LOW (dest) - s - 1;
  size_t n;

  do
    {
      c = *s++;
      s[off] = c;
    }
  while (c != '\0');

  n = s - src;
  (void) CHECK_BOUNDS_HIGH (src + n);
  (void) CHECK_BOUNDS_HIGH (dest + n);

  return dest;
}
libc_hidden_builtin_def (strcpy)


[解决办法]
 char* strcpy(char *d, const char *s)
 {
   char *r=d;
   while((*d++=*s++));
   return r;
 }


这应该只是一段示意代码,真正的实现应该至少要用断言对输入参数进行判断。

热点排行