Menu
Coddy logo textTech

復習:Stringラッパー

CoddyのCジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 16/61。

challenge icon

チャレンジ

簡単

動的に割り当てられた文字配列をラップする StringObject モジュールを構築しましょう。この復習チャレンジでは、完全なオブジェクトのライフサイクル、コンストラクター、読み取り専用メソッド、デストラクターを組み合わせ、それらを連携させて安全に memory を管理します。

3つのファイルを作成します。

  • stringobj.h: 1つの member を持つ StringObject structDeclare します。その memberchar *text(動的に割り当てられた string への pointer)です。また、3つの functionDeclare します。
    • create_string: const char *input を受け取り、新しく割り当てられた StringObject への pointer を返します
    • print_string: const StringObject * を受け取り、保存されたテキストを displays します
    • free_string: StringObject * を受け取り、割り当てられたすべての memory を解放します
    シンボル STRINGOBJ_H を使用してインクルードガードを設定します。
  • stringobj.c: 3つすべての functionImplement します。コンストラクターでは、まず struct 用の memory を割り当て、次にテキスト用の memory を割り当て(null 終端文字の分として strlen に1を加えることを忘れないでください)、input string をコピーします。デストラクターでは逆の順序で Free する必要があります。最初に内部の text buffer を、次に struct 自体を Free します。safety のため、デストラクターに NULL チェックを含めます。
  • main.c: モジュールを使用して string オブジェクトを作成し、その内容を displays してから、適切にクリーンアップします。

StringObject に保存する1つの入力、つまりtext stringを受け取ります。

main ファイルで、提供されたテキストを使用して StringObject を作成し、その内容を出力し、memory を解放してから、確認メッセージを出力します。

print_string function は、次の形式で出力します。

Text: {text}

解放した後、次のように出力します。

Freed

たとえば、入力が Hello World の場合、出力は次のようになります。

Text: Hello World
Freed
REQUIRED OUTPUT FORMAT: [翻訳したコンテンツ]

自分で試してみよう

#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: Create a StringObject with the input text
    
    // TODO: print_string を使用して文字列を出力する
    
    // TODO: Free the StringObject using free_string
    
    // TODO: クリーンアップを確認するために "Freed" を出力する
    
    return 0;
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Cオンラインコンパイラ