当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么strcpy不使用const指针作为dest?》经验,为你挑选了1个好方法。

有没有理由strcpy的签名是这样的:

char *strcpy(char *dest, const char *src);

而不是这个?

char *strcpy(char *const dest, const char *src);

据我所知,该函数永远不会改变指针.

我误解了应该使用的const指针吗?在我看来,当我写的函数接受一个不会被改变的指针(通过realloc等),然后我将它标记为一个const指针,这样可以确保调用者不会在它们上移动它们的指针.(如果它们有其他结构/等,引用那个过时的指针位置)

这是一个好的做法,还是会产生意想不到的后果?



1> Jabberwocky..:

源代码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变量.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有