2026年3月3日火曜日

c言語で文字列をメモリに読み込むコードを教えてください。

 C言語で文字列をメモリに読み込むには、主に**「静的な配列」を使う方法と、「動的なメモリ確保(malloc)」**を使う方法の2通りがあります。

初心者の方にも扱いやすい、標準入力(キーボード)から文字列を読み込む代表的なコードを紹介します。


1. 静的な配列を使用する方法(手軽な方法)

あらかじめ決まったサイズの箱(配列)を用意しておく方法です。

C
#include <stdio.h>

int main() {
    char str[100]; // 100バイトのメモリを確保

    printf("文字列を入力してください: ");
    // scanfはスペースで止まるため、一行読み込むには fgets が推奨されます
    fgets(str, sizeof(str), stdin);

    printf("読み込んだ文字列: %s", str);
    return 0;
}

2. 動的なメモリ確保を使用する方法(柔軟な方法)

プログラムの実行中に、必要な分だけメモリを確保する方法です。malloc 関数を使用し、使い終わったら free でメモリを解放するのがルールです。

C
#include <stdio.h>
#include <stdlib.h> // malloc, free に必要

int main() {
    char *ptr;
    int size = 100;

    // ヒープ領域にメモリを確保
    ptr = (char *)malloc(size * sizeof(char));

    if (ptr == NULL) {
        printf("メモリの確保に失敗しました。\n");
        return 1;
    }

    printf("文字列を入力してください: ");
    scanf("%99s", ptr); // 最大99文字読み込み(最後にヌル文字が入るため)

    printf("メモリ上の文字列: %s\n", ptr);

    // 使い終わったら必ず解放
    free(ptr);

    return 0;
}

⚠️ 注意点:メモリの構造

C言語で文字列を扱う際、メモリ上では文字の最後に必ず ヌル文字 \0 が追加されます。そのため、10文字の単語を保存するには、最低でも 11バイト のメモリが必要です。

💡 どちらを使うべき?

  • 配列 (char str[100]): 読み込む文字数の上限が決まっている場合に適しています。管理が楽です。

  • 動的確保 (malloc): 実行時まで文字数がわからない場合や、非常に大きなデータを扱う場合に適しています。


特定のファイルから読み込みたい場合や、ポインタの概念についてもっと詳しく知りたい部分はありますか?

(※画面上のコピーアイコンで、このコードをエディタに貼り付けて試せます)