需要有关 C 中 strcpy 方面的指导

Need guidance with aspects of strcpy in C

此代码来自 string.c 中的 strcpy 我试图了解这里的一些功能:

 char *(strcpy)(char *restrict s1, const char *restrict s2)
 {
     char *dst = s1;
     const char *src = s2;
     while ((*dst++ = *src++) != '[=10=]')
         ;
     return s1;
 }

这个 while 循环发生了什么?

(*dst++ = *src++)

谢谢。

(*dst++ = *src++)

这里发生了很多事情。 首先要注意的是,这是将 *src++ 的值赋给 *dst++。 星号取消引用 dst++src++,因此这是一个 char 到另一个的赋值。请注意,++ 运算符的优先级高于 *(取消引用)运算符。参见 https://en.cppreference.com/w/c/language/operator_precedence

第二个重要细节是增量是后缀; ++ 在变量 dstsrc 的右边。所以 dstsrc 只会在 while 内的检查完成后递增。实际上,这会将 dst 中的第一个字符设置为 src 中的第一个字符。

因此,dstsrc 每次 src 的第一个字符不是零字符时加一 [=28=]

关于您的第二个问题,请参阅 What do the parentheses around a function name mean?

src 被声明为 const char * 因为它指向的字符没有被修改,这通常是一种好的做法。互联网上对此有很多讨论;例如https://dev.to/fenbf/please-declare-your-variables-as-const。请注意,src 本身(指针)在 while 循环中被明确修改。