C:为什么strcpy会返回它的参数?

时间:2013-05-05 15:46:07

标签: c libc

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

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

3 个答案:

答案 0 :(得分:2)

由于历史原因。 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));

答案 1 :(得分:1)

这样你就可以做一些像

这样的事情
char * str = strcpy(malloc(12), "MyNewString");

答案 2 :(得分:0)

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

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