实现具有以下原型的append函数。该函数返回一个字符串,该字符串表示字符串数组中存在的所有字符串的串联。对于此问题,您可以假设参数数组的末尾由
NULL
标记。您需要为结果字符串分配内存。您可能无法修改数组参数。char* append(char *data[]);
我不明白如何确定指针malloc
的大小。
答案 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
)。