gpt4 book ai didi

c - 将字符串数组转换为 C 中的字符串

转载 作者:太空狗 更新时间:2023-10-29 15:32:28 25 4
gpt4 key购买 nike

我可能遗漏了这个问题的一个微妙之处,因为我在互联网上找不到相关结果,而我认为这是一个常见的结果。

无论如何,这是我的问题:

我有一个字符串数组,我想将其连接成一个字符串,从 char** 到 char*。

是否有任何函数可用于该目的,或者我是否必须为新字符串分配内存,并在循环中使用 strcat() 以便将数组中的所有字符串一一连接起来?

提前致谢!

最佳答案

没有标准库函数可以做到这一点。

最有效的解决方案是计算连接字符串的大小,然后将组件strcpy 放入正确的位置。这需要跟踪字符串的大小,这有点开销,或者扫描每个组件字符串的长度两次。

使用 strcat 将需要在每次连接时重新扫描构造的字符串,从而导致二次运行时间。但是,如果您知道数组中不会有太多字符串并且操作不在关键循环中,那么它可能是可以接受的。


这是一个简单的递归解决方案,用于演示目的。与所有递归程序一样,在生产代码中应谨慎使用它,因为它有可能溢出调用堆栈,但它很容易被修改为迭代解决方案。

(标准的迭代转换需要一个堆栈来保留递归函数的状态,但递归调用后所需的状态部分仅包含可以重新计算的my_len。)

char* join_helper(char** in, size_t inlen, size_t inpos, size_t accum) {
if (inpos == inlen)
return strcpy(malloc(accum + 1) + accum, "");
else {
size_t mylen = strlen(in[inpos]);
return memcpy(
join_helper(in, inlen, inpos + 1, accum + mylen) - mylen,
in[inpos], mylen);
}
}

/* The string returned by this function is malloc'd and needs
* to be free'd by the caller
*/
char* join(char** in, size_t inlen) {
return join_helper(in, inlen, 0, 0);
}

关于c - 将字符串数组转换为 C 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29149281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com