wuy*_*bao 2 c string pointers copy
有两个版本的字符串复制函数用C编写.我的问题是为什么版本1需要"!='\ 0'"但版本2不需要.如果我使用版本2复制字符0,"0"将终止应对过程怎么办?
void version1(char to[], char from[])
{
int i;
i = 0;
while ((to[i] = from[i]) != '\0')
++i;
}
char *version2(char *dest, const char *src)
{
char *addr = dest;
while (*dest++ = *src++);
return addr;
}
Run Code Online (Sandbox Code Playgroud)
另外,为什么像"1230456"这样的输入不会终止复制,因为'0'出现在字符串的中间?
这是因为在C中,零比较是可选的.在需要逻辑表达式的上下文中使用表达式时,C会为您插入一个隐式比较为零.
您可以在不更改语义的情况下重写第一个函数:
while ((to[i] = from[i]))
++i;
Run Code Online (Sandbox Code Playgroud)
此外,您可以重写第二个函数,如下所示:
while ((*dest++ = *src++) != '\0');
Run Code Online (Sandbox Code Playgroud)