题目:
标准库函数strcat会将一个字符串追加到另一个字符串的末尾。
现在我们编写一个函数把两个字符串拼接起来,返回拼接的结果,但要求不改变其中任何一个字符串。其函数声明如下:
char* my_strcat(const char* prefix, const char* suffix);
形参prefix表示前缀,suffix表示后缀,拼接的结果是prefix + suffix比如:my_strcat(“abc”, “d”),拼接的结果是"abcd"。
思路:
在堆上分配内存空间,用于存储结果字符串。
将prefix和suffix两个字符串的字符信息复制进去
。
关键点
分析:
:
代码
// 在堆上动态分配内存拼接两个字符串
char* dynamic_strcat(const char* prefix, const char* suffix) {
// 计算拼接后字符串的长度
int new_str_len = strlen(prefix) + strlen(suffix);
char *new_str = malloc(new_str_len + 1); // char在各平台上长度都是1,所以不用乘了
if (new_str == NULL) {
printf("ERROR: malloc failed in dynamic_strcat!\n");
exit(1);
}
// 长度是精确计算得出的,不用担心越界访问
strcat(strcpy(new_str, prefix), suffix);
return new_str;
}
int main(void) {
char str1[] = "hello";
char str2[] = " world!";
char* result_str = dynamic_strcat(str1, str2); // 注意只要涉及动态内存分配,一律用指针类型。这里不能用数组类型
puts(result_str);
// 现在不再使用result字符串了,不要忘记free它
free(result_str);
return 0;
}
解决方案总结:
: