假设我们想在 C 中将 const char *s[0], s[1], ... s[n-1] 连接成一个 long char out[]。
正式地(忽略缓冲区溢出,为简单起见):
void concatManyStrings(char out[], const char *s[], size_t n);
当然,这是一项微不足道的任务:从指向 out 的指针开始,并为每个字符推进它,
在循环输入字符串时。
另一种方法(仍然是线性时间)是将指针指向末尾,
每个 s[i] 做:
{ strcpy(endp, s[i]); endp += strlen(s[i]); }
但是,如果有一个知道如何 strcpy()
的标准 CRT 函数,代码会更清晰,
并返回复制的字符数(或等效地,指向复制后的下一个字符的指针)。
我能想到的唯一一个 CRT 函数是 sprintf()
,但它显然不近
与返回计数的简单 strcpy()
一样高效。
有没有我缺少的功能?
最佳答案
不幸的是,
strlcpy()
和 strlcat()
是非标准的,但是如果您碰巧拥有它们,您可以将它们用于此目的。它们都返回让您确定复制字符串的 end 的结果,这与 strcpy()
和 strcat()
不同(有点无用)返回指向目的地起点的指针。
关于在线性时间内用 crt 连接 C 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7196178/