需要有关 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。
第二个重要细节是增量是后缀; ++
在变量 dst
和 src
的右边。所以 dst
和 src
只会在 while 内的检查完成后递增。实际上,这会将 dst
中的第一个字符设置为 src
中的第一个字符。
因此,dst
和 src
每次 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 循环中被明确修改。
此代码来自 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。
第二个重要细节是增量是后缀; ++
在变量 dst
和 src
的右边。所以 dst
和 src
只会在 while 内的检查完成后递增。实际上,这会将 dst
中的第一个字符设置为 src
中的第一个字符。
因此,dst
和 src
每次 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 循环中被明确修改。