有没有理由strcpy的签名是这样的:
char *strcpy(char *dest, const char *src);
而不是这个?
char *strcpy(char *const dest, const char *src);
据我所知,函数永远不会改变指针。
我是否误解了 const 指针的用途?在我看来,当我编写的函数接受一个不会更改的指针(通过 realloc 等)时,我将其标记为 const 指针,这样调用者就可以确信他们的指针不会在它们上面移动。 (以防他们有其他结构/等引用该指针位置会变得过时)
这是一个好的做法,还是会产生意想不到的后果?
最佳答案
strcpy
的源代码大致如下:
char *strcpy(char *dest, const char *src)
{
while (*dest++ = *src++);
}
这里我们实际上修改了 dest
但这对调用者没有影响,因为在 strcpy
函数内部,dest
是一个局部变量。
但是下面的代码不会编译,因为 dest
是 const:
char *strcpy(char * const dest, const char *src)
{
while (*dest++ = *src++);
}
我们需要这样写:
char *strcpy(char * const dest, const char *src)
{
char *temp = dest;
while (*temp++ = *src++);
}
它引入了一个不必要的 temp
变量。
关于c - 为什么 strcpy 不为 dest 使用 const 指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41810865/