6

为什么strcpy(3)(and strncpy(3)) 返回他们的第一个参数?我看不出这如何增加任何价值。相反,我经常宁愿返回复制的字节数。

附录:当我还需要结果字符串的长度时,我应该怎么做?我真的必须实现自己的版本吗?

4

3 回答 3

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));
于 2013-05-05T15:49:22.400 回答
1

这样你就可以做类似的事情

char * str = strcpy(malloc(12), "MyNewString");
于 2013-05-05T15:48:57.317 回答
1

C 库中的大多数字符串函数都是由业余爱好者设计的。例如,在我 25 年的职业生涯中,我从未使用过 strcat() 函数,但我一直在连接字符串。此外,如果您认为 printf(),如果您为 %s 参数传递 NULL,则几乎没有文档。传递 '\0' 或 malloc(0) 的 %c 也是如此。

遗憾的是,最有用的 strcpy() 应该返回一个指向目标缓冲区末尾的指针以进行链式复制。

于 2017-04-23T14:32:44.150 回答