Menu
CoddyTech

复习:动态字符串拼接

本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 61 课,共 63 课。

challenge icon

挑战

简单

创建一个 C 程序,实现动态字符串拼接函数,以构建文本处理工具。你的程序应该:

  1. 编写一个名为 concatenateStrings 的函数,该函数:
    • 接收两个 char* 参数,分别名为 str1 和 str2
    • 返回一个指向动态分配字符串的 char*
    • 计算两个字符串以及空终止符所需的总内存
    • 使用 malloc() 分配所需的准确内存
    • 检查内存分配是否成功(如果分配失败,则返回 NULL)
    • 使用 strcpy() 将第一个字符串复制到已分配的内存中
    • 使用 strcat() 将第二个字符串追加到结果中
    • 返回指向新创建的拼接字符串的指针
  2. 编写一个名为 processText 的函数,该函数:
    • 接收三个 char* 参数:word1、word2 和 separator
    • 返回一个指向动态分配字符串的 char*
    • 按以下格式创建组合字符串:word1 + separator + word2
    • 先调用 concatenateStrings,拼接 word1 和 separator
    • 然后再次调用 concatenateStrings,将 word2 追加到结果中
    • 正确释放所有中间分配的内存
    • 返回最终拼接结果
  3. 在 main 函数中:
    • 声明三个大小均为 50 的字符数组:firstWord、secondWord 和 connector
    • 从输入中读取三个字符串,分别代表第一个单词、第二个单词和连接符
    • 使用这三个字符串调用 processText 函数
    • 检查返回的指针是否不为 NULL
    • 如果成功,则按以下精确格式打印结果:Result: [concatenated_string]
    • 如果内存分配失败,则打印:Memory allocation failed
    • 计算结果字符串的长度,并按以下精确格式打印:Length: [length]
    • 释放动态分配的内存

这个挑战将检验你对动态内存分配、字符串操作函数、指针返回值和正确内存管理的掌握程度。你将练习计算内存需求、使用 malloc() 和 free()、使用多个字符串函数,以及处理内存分配失败的情况。这个挑战将展示动态分配如何让函数创建并返回在函数作用域结束后仍然存在的数据。

亲手试试

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// TODO:在这里编写你的 concatenateStrings 函数

// TODO:在这里编写你的 processText 函数

int main() {
    // 读取输入
    char firstWord[50];
    char secondWord[50];
    char connector[50];
    
    scanf("%s", firstWord);
    scanf("%s", secondWord);
    scanf("%s", connector);
    
    // TODO:在下方编写你的代码
    // 调用 processText 函数并处理结果
    
    return 0;
}

逻辑与流程中的所有课

自己练习: C 在线编译器