有没有理由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
变量.