Menu
Coddy logo textTech

요약: String Wrapper

Coddy C 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 61개 중 16번째.

challenge icon

챌린지

쉬움

동적으로 할당된 문자 배열을 감싸는 StringObject 모듈을 만들어 봅시다. 이 복습 챌린지는 생성자, 읽기 전용 메서드, 소멸자로 이어지는 전체 객체 수명 주기를 하나로 묶어 메모리를 안전하게 관리하는 방법을 다룹니다.

세 개의 파일을 생성하게 됩니다:

  • stringobj.h: 단일 멤버 char *text(동적으로 할당된 문자열에 대한 포인터)를 가진 StringObject 구조체를 선언하세요. 또한 다음 세 가지 함수를 선언하세요:
    • create_stringconst char * 입력을 받아 새로 할당된 StringObject에 대한 포인터를 반환합니다.
    • print_stringconst StringObject *를 받아 저장된 텍스트를 표시합니다.
    • free_stringStringObject *를 받아 할당된 모든 메모리를 해제합니다.
    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;
}

Object Oriented Programming의 모든 레슨