gpt4 book ai didi

c - 带指针和不带指针的 C 中的字符串复制

转载 作者:行者123 更新时间:2023-12-02 08:37:23 25 4
gpt4 key购买 nike

用C 编写的字符串复制函数有两个版本。我的问题是为什么版本1 需要"!= '\0'"而版本2 不需要。如果我有一个字符 0 要使用版本 2 复制,'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;
}

此外,为什么像“1230456”这样的输入不会终止应对,因为“0”出现在字符串的中间?

最佳答案

这是因为在 C 语言中与零的比较是可选的。当您在需要逻辑表达式的上下文中使用表达式时,C 会为您插入一个与零的隐式比较。

您可以按如下方式重写第一个函数而不更改语义:

while ((to[i] = from[i]))
++i;

此外,您可以按如下方式重写第二个函数:

while ((*dest++ = *src++) != '\0');

关于c - 带指针和不带指针的 C 中的字符串复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19937278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com