习题4-1:用堆分配存储方式创建串T,将串S1和串S2合并后复制入串T。用c语言写出完整代码 示例: 输入:hello 输入:world 输出:helloworld
时间: 2024-12-20 19:15:48 浏览: 2
要解决习题4-1,你可以使用C语言中的动态内存分配(通过`malloc()`函数)来创建一个新的字符串T,然后逐字符合并S1和S2。这里是一个完整的代码实现:
```c
#include <stdio.h>
#include <stdlib.h> // 包含malloc和free函数
// 定义合并两个字符串的函数
void mergeStrings(char *dest, const char *src1, const char *src2) {
int len1 = strlen(src1);
int len2 = strlen(src2);
// 如果src2为空,直接将src1复制到dest
if (len2 == 0) {
strcpy(dest, src1);
return;
}
// 将src1的内容复制到dest,然后添加src2的内容
strcpy(dest, src1); // 前半部分
strcat(dest, src2); // 后半部分
}
int main() {
char *s1 = "hello"; // 输入的字符串S1
char *s2 = "world"; // 输入的字符串S2
size_t len_s1 = strlen(s1);
size_t len_s2 = strlen(s2);
// 使用堆分配创建足够的空间存储合并后的字符串
char *T = (char*)malloc(len_s1 + len_s2 + 1); // 为'\0'留出额外的空间
if (T == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
// 调用mergeStrings函数合并字符串并复制到T
mergeStrings(T, s1, s2);
// 打印结果
printf("Output: %s\n", T);
// 释放动态分配的内存
free(T);
return 0;
}
```
这段代码首先计算S1和S2的长度,然后分配足够的空间来存储合并后的字符串。接着调用`mergeStrings`函数完成合并,并打印结果。最后别忘了使用`free(T)`释放动态分配的内存以避免内存泄漏。
阅读全文