为什么strcpy(3)
(and strncpy(3)
) 返回他们的第一个参数?我看不出这如何增加任何价值。相反,我经常宁愿返回复制的字节数。
附录:当我还需要结果字符串的长度时,我应该怎么做?我真的必须实现自己的版本吗?
由于历史原因。strcpy
和朋友们可以追溯到七十年代初,我猜返回值的预期用例将是一种链接:
// copy src into buf1 and buf2 in a single expression
strcpy(buf1, strcpy(buf2, src));
或者
char *temp = xmalloc(strlen(const_str) + 1);
function_that_takes_mutable_str(strcpy(temp, const_str));
这样你就可以做类似的事情
char * str = strcpy(malloc(12), "MyNewString");
C 库中的大多数字符串函数都是由业余爱好者设计的。例如,在我 25 年的职业生涯中,我从未使用过 strcat() 函数,但我一直在连接字符串。此外,如果您认为 printf(),如果您为 %s 参数传递 NULL,则几乎没有文档。传递 '\0' 或 malloc(0) 的 %c 也是如此。
遗憾的是,最有用的 strcpy() 应该返回一个指向目标缓冲区末尾的指针以进行链式复制。