【发布时间】:2020-09-11 15:03:02
【问题描述】:
此代码来自 string.c 中的 strcpy 我想了解这里的一些功能:
char *(strcpy)(char *restrict s1, const char *restrict s2)
{
char *dst = s1;
const char *src = s2;
while ((*dst++ = *src++) != '\0')
;
return s1;
}
这个while循环发生了什么?
(*dst++ = *src++)
谢谢。
【问题讨论】:
-
详细说明“为什么他们将 src 声明为 const char 而不仅仅是 char”-->
src不是const char。src是const char *。src是一个指针。 -
(1)
(*dst++ = *src++)将一个字符从源复制到目标并将两个指针都前进,因此下次它将复制下一个字符。由于赋值的结果是赋值的值,循环将在复制一个 NUL 后停止,该 NUL 必须位于每个字符串的末尾。 (2a) 这样如果它也是一个类似函数的宏,它就不会被扩展。 (2b) 返回类型是char *,因为它返回一个指向字符数组的指针,也就是一个字符串。 (3) 通知世界它不会修改src。 // 尝试在每个帖子中问一个问题,并尝试更好地解释您的困惑。 -
但 char *dst 也是如此。那么为什么要使用 const 呢?
-
因为它确实修改了
dst。 -
so rici,如果我想从一个数组复制到另一个数组,我可以在函数之外说 `while ((a++ = b++) != '\0') 没有指针引用像这样一个空的身体,这是可以接受的语法吗?并且可能比执行相同操作的 for 循环更有效?