如何预先确定malloc的大小以连接字符串数组?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何预先确定malloc的大小以连接字符串数组?相关的知识,希望对你有一定的参考价值。
实现具有下面原型的append函数。该函数返回一个字符串,该字符串表示字符串数组中存在的所有字符串的串联。对于此问题,您可以假设参数数组的末尾由
NULL
标记。您需要为结果字符串分配内存。您可能无法修改数组参数。char* append(char *data[]);
我不明白如何确定malloc
指针的大小。
答案
首先,要知道一个字符串的大小,您可以使用库strlen
中的string.h
。如果你想计算所有大小的总和,你可以使用一个循环并总结所有的strlen
s,并为终端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的大小以连接字符串数组?的主要内容,如果未能解决你的问题,请参考以下文章