如何预先确定malloc的大小以连接字符串数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何预先确定malloc的大小以连接字符串数组?相关的知识,希望对你有一定的参考价值。

实现具有下面原型的append函数。该函数返回一个字符串,该字符串表示字符串数组中存在的所有字符串的串联。对于此问题,您可以假设参数数组的末尾由NULL标记。您需要为结果字符串分配内存。您可能无法修改数组参数。

char* append(char *data[]); 

我不明白如何确定malloc指针的大小。

答案

首先,要知道一个字符串的大小,您可以使用库strlen中的string.h。如果你想计算所有大小的总和,你可以使用一个循环并总结所有的strlens,并为终端1字符添加NUL,如下所示:

char* append(char *data[]) {
    char **cur, *res;
    size_t len = 0;

    for (cur = data; *cur != NULL; *cur++)
        len += strlen(*cur);

    res = malloc(len + 1);

    // Now you can concatenate the strings...
}

哦,不要忘记检查malloc返回的指针是否有效(即不是NULL)。

另一答案

两次通过字符串的方法似乎很好。

第一遍计算长度的总和:

size_t len = 0;
for (char** pstr = data; *pstr; pstr++)
    len += strlen(*pstr);

第二遍连接所有字符串:

char *str = malloc(len + 1);
str[0] = '';
for (char** pstr = data; *pstr; pstr++)
    strcat(str, *pstr);
return str;

您可以通过存储最后一个连接的结束点来优化连接部分:

char *str = malloc(len + 1);
str[0] = '';

char *p = str;
for (char** pstr = data; *pstr; pstr++) {
    strcat(p, *pstr);
    p += strlen(*pstr);
}

以上是关于如何预先确定malloc的大小以连接字符串数组?的主要内容,如果未能解决你的问题,请参考以下文章

在颤动中 - 我如何最好地处理和分配预先确定的键给 json 中的嵌套列表/数组

C语言中如何定义一个二维数组,数组长度由输入值确定?

c语言中怎么随输入确定数组大小,最好有实例

c语言动态数组如何扩充空间

我想先从外面输入一个数,然后来确定这个数组的大小,怎么弄啊

c语言中啥是动态分配内存?