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

问题描述 投票:1回答:2

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

char* append(char *data[]); 

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

c string pointers
2个回答
1
投票

首先,要知道一个字符串的大小,您可以使用库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)。


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);
}
© www.soinside.com 2019 - 2024. All rights reserved.