요약: String Wrapper
Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 16번째.
챌린지
쉬움동적으로 할당된 문자 배열을 감싸는 StringObject 모듈을 만들어 봅시다. 이 복습 챌린지는 생성자, 읽기 전용 메서드, 소멸자로 이어지는 전체 객체 수명 주기를 하나로 묶어 메모리를 안전하게 관리하는 방법을 다룹니다.
세 개의 파일을 생성하게 됩니다:
stringobj.h: 단일 멤버char *text(동적으로 할당된 문자열에 대한 포인터)를 가진StringObject구조체를 선언하세요. 또한 다음 세 가지 함수를 선언하세요:create_string—const char *입력을 받아 새로 할당된 StringObject에 대한 포인터를 반환합니다.print_string—const StringObject *를 받아 저장된 텍스트를 표시합니다.free_string—StringObject *를 받아 할당된 모든 메모리를 해제합니다.
STRINGOBJ_H심볼을 사용하여 include 가드를 적용하세요.stringobj.c: 세 가지 함수를 모두 구현하세요. 생성자는 구조체를 위한 메모리를 할당한 다음, 텍스트를 위한 메모리를 할당하고(strlen에 널 종료 문자를 위한 1을 더하는 것을 잊지 마세요), 입력 문자열을 복사해야 합니다. 소멸자는 역순으로 해제해야 합니다. 즉, 내부text버퍼를 먼저 해제한 다음 구조체 자체를 해제합니다. 안전을 위해 소멸자에 NULL 체크를 포함하세요.main.c: 모듈을 사용하여 문자열 객체를 생성하고, 내용을 표시한 다음, 적절하게 정리하세요.
하나의 입력을 받게 됩니다: StringObject에 저장할 텍스트 문자열입니다.
메인 파일에서 제공된 텍스트로 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;
}