qq_33487700 2020-08-27 10:25 采纳率: 0%
浏览 53

strcpy自实现中的问题

1.最近看了很多自实现的strcpy代码,基本上是下面的形式:
char * my_strcpy(char * dest, const char * src)
{
char *ch = dest;
assert(dest != NULL);

assert(src != NULL);
while ((*dest++ = *src++) != '\0'); //while最简

return dest;                            

}
甚至有的版本说while循环写成 while (*dest++ = *src++); 这种形式是
不正确的。

想了半天没搞明白为什么不正确。这两个有区别吗?
while ((*dest++ = *src++) != '\0'); 只是你显示判断表达式的值;
while (*dest++ = *src++); 是由while循环判断了表达式的值。

好像这个两种写法在自实现strcpy 中没啥区别吧?应该都可以。有人知道这两个写法在自实现strcpy上有什么区别吗?会造成什么不同的现象出现吗?

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-08-27 10:39
    关注
    因为你没有考虑重叠
    
    比如说有如下代码
    char ch[100] = "hhello";
    strcpy(ch, ch + 1);
    你的代码无法正常工作,但是你试试看系统库,是可以得到hello的
    
    评论

报告相同问题?