回顾:字符串包装类
本课属于 Coddy C 学习旅程的“面向对象编程”单元。第 16 课,共 61 课。
挑战
简单让我们构建一个 StringObject 模块,用来封装动态分配的字符数组。这个回顾挑战将完整的对象生命周期、构造函数、只读方法和析构函数结合起来,共同安全地管理内存。
你将创建三个文件:
stringobj.h:声明一个StringObject结构体,其中只有一个成员:char *text(指向动态分配的字符串的指针)。还要声明三个函数:create_string:接收一个const char *输入,并返回指向新分配的 StringObject 的指针print_string:接收一个const StringObject *,并显示存储的文本free_string:接收一个StringObject *,并释放所有已分配的内存
STRINGOBJ_H设置包含保护。stringobj.c:实现这三个函数。构造函数应先为结构体分配内存,再为文本分配内存(记得分配strlen加 1 个字节,用于空终止符),然后复制输入字符串。析构函数必须按相反的顺序释放内存:先释放内部的text缓冲区,再释放结构体本身。为确保安全,请在析构函数中检查 NULL。main.c:使用你的模块创建一个字符串对象,显示其内容,然后正确地清理内存。
你将收到一个输入:要存储在 StringObject 中的文本字符串。
在 main 文件中,使用提供的文本创建一个 StringObject,打印其内容,释放内存,然后打印确认消息。
print_string 函数应按以下格式输出:
Text: {text}释放内存后,打印:
Freed例如,输入 Hello World 时,输出如下:
Text: Hello World
Freed亲手试试
#include <stdio.h>
#include "stringobj.h"
int main() {
char input[256];
fgets(input, sizeof(input), stdin);
// 如果有换行符,就将其删除
int len = 0;
while (input[len] != '\0') len++;
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
// TODO: 用输入文本创建一个 StringObject
// TODO: 使用 print_string 打印字符串
// TODO: 使用 free_string 释放 StringObject
// TODO: 打印 "Freed" 以确认清理完成
return 0;
}
面向对象编程中的所有课
自己练习: C 在线编译器