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

时间:2018-02-28 06:24:41

标签: c string pointers

  

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

char* append(char *data[]); 

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

2 个答案:

答案 0 :(得分:1)

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

第一遍计算长度的总和:

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

第二遍连接所有字符串:

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

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

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

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

答案 1 :(得分:1)

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

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)。