假设我们想在 C 中将 const char *s[0], s[1], ... s[n-1] 连接成一个 long char out[]。
形式上(为简单起见,忽略缓冲区溢出):
void concatManyStrings(char out[], const char *s[], size_t n);
当然,这是一项微不足道的任务:从指向 out 的指针开始并为每个 char 推进它,
同时循环输入字符串。
另一种方法(仍然是线性时间)是保持一个指向末尾的指针,
并且每个 s[i] 都这样做:
{ strcpy(endp, s[i]); endp += strlen(s[i]); }
但是,如果有一个标准的 CRT 函数知道如何strcpy()
,
并返回复制的字符数(或等效地,指向复制后的下一个字符的指针),则代码会更清晰。
我能想到的唯一 CRT 函数就是sprintf()
,但它显然不如返回计数
的简单函数那么有效。strcpy()
有没有我缺少的功能?