为什么strcpy(3)
(和strncpy(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()应该返回一个指向目标缓冲区末尾的指针进行链式复制。