读书人

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

发布时间: 2013-08-01 15:23:18 作者: rapoo

关于经典笔试题目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;
 }


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

读书人网 >C语言

热点推荐