在线性时间内用 crt 连接 C 字符串

标签 c string crt concatenation strcat

假设我们想在 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/

相关文章:

c - 尝试使用 scanf 中的数据时出现段错误?

c - 在 C 中错误处理 mkdir 和 chdir?

JavaScript字符串替换与replaceAll

c++ - 是否有函数/WinAPI 以不区分大小写的语言方式判断一个字符串是否以另一个字符串开头?

c - 如何在 LLVM C API 中使用 LLVMBuildGEP 函数

c - 在 C 上加载 BMP 文件时出错

c++ - std::wstring VS std::string

C# .ToString ("X4") 在 Java 中等效

c++ - 发现问题: Visual Studio CRT library : FLS_GETVALUE

c++ - Visual Studio 2015 : Compile C/C++ without a runtime library