c - 为什么 strcpy 不为 dest 使用 const 指针?

标签 c pointers constants strcpy

有没有理由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/

相关文章:

c - 如何正确识别C中的不同行尾?

objective-c - 在 Objective-C 协议(protocol)中定义字符串常量的最佳方式是什么?

c++ - 从 const double 的指针返回指向 double 的指针

javascript - 为什么 Node.js 中的事件不使用常量?

c - Kconfig、宏和未定义的宏警告

Chrome 响应后关闭 TCP 连接

c - 如何设置矩阵的基地址?

objective-c - 如何在多种方法中冒泡错误对象?

c - 指针游戏数组不知道如何将指针向后移动

c - 函数总是返回指向 null 的指针