コース一覧
    C言語基礎 関数・配列編
    文字列関数

    C言語基礎 関数・配列編

    C言語の関数と配列を学び、処理を分割してデータを扱うコースです。

    1
    関数
    01. 関数を定義する15分
    02. 引数と戻り値15分
    03. プロトタイプ宣言15分
    04. void関数15分
    05. 変数のスコープ15分
    06. つくる 関数に分割15分
    07. 第5章クイズ10分
    2
    配列と文字列
    01. 配列15分
    02. 配列とfor15分
    03. 集計15分
    04. 最高点と最低点15分
    05. 文字列(char配列)15分
    06. 文字列関数15分
    07. 文字列の入力15分
    08. つくる 配列で成績管理15分
    09. 第6章クイズ10分

    文字列関数

    毎回自分でループを書かなくていい

    前回は終端記号に当たるまで添字を進めて、文字数を自分で数えました。よく使う操作は標準ライブラリにそろっているので、実際には自分で書きません。文字列を扱う関数は string.h にまとまっています。

    c

    #include <stdio.h>
    #include <string.h>

    この章で覚えるのは3つだけです。長さを測る strlen、コピーする strcpy、比べる strcmp です。

    strlen は終端記号を数えない

    c

    char name[20] = "Sato";
    printf("%d\n", (int)strlen(name));   // 4

    strlen が返すのは、終端記号の手前までの文字数です。ですから "Sato" なら 4 で、確保した箱の数である 20 ではありません。中身の長さと箱の大きさは別物という区別が、C の文字列でいちばん大事なところです。

    戻り値の型は int ではなく size_t という符号なしの型なので、%d で出すときは (int) を付けて int に直します。第2章でやったキャストです。

    strcpy は = の代わり

    配列に文字列を入れられるのは宣言のときだけで、あとから = で入れることはできません。

    c

    char name[20];
    name = "Sato";              // これはコンパイルエラー
    strcpy(name, "Sato");       // これが正しい

    strcpy(コピー先, コピー元) の順で書きます。代入と同じで、左が受け取る側です。

    危ないのは、コピー先の箱が足りない場合です。strcpy は入りきるかどうかを確かめずに、終端記号まで書き込み続けます。

    c

    char small[4];
    strcpy(small, "Yamada");   // 4個の箱に7個ぶん書き込む。周りが壊れる

    コンパイルは通ってしまうので、コピー先の大きさは自分で保証するしかありません。

    strcmp は同じなら0

    文字列どうしを == で比べても、中身は比べられません。strcmp を使います。

    c

    if (strcmp(name1, name2) == 0) {
        printf("同じ名前です\n");
    }

    返ってくるのは「同じかどうか」の真偽ではなく、辞書順でどちらが先かを表す数です。同じなら 0、name1 のほうが辞書順で前なら負、後ろなら正になります。0 が「同じ」というのは直感に反するので、if (strcmp(a, b)) と書くと意味が反転してしまいます。必ず == 0 を付けてください。

    負や正の値そのものは処理系によって違うことがあるので、大小を見たいときは < 0 と > 0 で判定します。

    では、3つの関数を使ってみましょう。

    要件

    1. string.h を include する
    2. Satoの文字数は4です の形で2人ぶん表示する
    3. 名前が同じなら 2つの名前は同じです、違うなら 2つの名前は違います と表示する
    4. name1 を backup にコピーして 控えはSatoです の形で表示する

    ヒント

    strlen の戻り値は (int) を付けてから %d で出します

    strcmp は同じときに 0 を返します。== 0 を忘れないでください

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/07

    関連レッスン

    • 文字列の入力

      名前をあふれさせずに入力できるようになります。

    • つくる 配列で成績管理

      名前と点数を添字で対応付けて管理できるようになります。

    • 第6章クイズ

      第6章の理解を確認します。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • ループ繰り返し処理。矢印で戻すか専用記号で示す
    • 標準ライブラリPythonに同梱の公式モジュール群
    • 関数処理に名前を付けて再利用できる単位
    • 戻り値呼び出し元への返答を表す点線矢印
    • instanceof「このオブジェクトの実際の型は何か」を確認 → 安全に変換
    • 配列サイズ固定の同型データの集まり
    • コンパイルソースをバイトコードへ変換する処理
    • 処理計算や代入を表す長方形
    main.c
    エディタを読み込んでいます

    メモ

    文字列関数

    ⌘S で保存