MMGamesロゴ  MMGames
Twitterシェアボタン  Facebookシェアボタン   
しんで覚えるC言語
しんで覚えるC言語

文字列を扱う方法

配列にしてしまおう
前項では、文字変数の取り扱いについて説明しました。
単純に考えれば、この文字変数をたくさん集めると、文字列になるはずです。
同じ型の変数をたくさん集める・・・、どこかで聞いたことがありませんか?

そうです。文字変数の配列を作れば、すなわち文字列になるのです。
文字変数の配列をC言語では文字列変数として使うことができます。

しかし、ここで1つの疑問が生じます。
それは、文字列の文字数をどのように記憶しておくかということです。
文字数がわからなくては、文字列を取り出す時に困ります。

C言語では、文字列の最後に特別な値を記憶しておくことで文字数を判定します。
この様な文字をとくにEOSと呼ぶことがあります。
C言語の場合、'\0'がEOSとして扱われます。'\0'は、数値としては0にあたります。

キーワード
【EOS】

文字列の終わりを表す記号。終端文字とも呼ばれる。
なお、End of String の頭文字をとっている。


文字列を作ることが出来れば、それを表示させることは簡単です。
printf関数では、%s指定子を使って文字列の表示ができます。

ここまでわかれば、文字列を扱うことができます。
次のプログラムは、文字変数の配列に文字列を記憶して表示する例です。

ソースコード
#include <stdio.h>

int main(void)
{
    char str[6] = { 'M', 'A', 'R', 'I', 'O', '\0' };
    printf("%s\n", str);
    return 0;
}

このプログラムの実行結果は次のようになります。

実行結果
MARIO

このプログラムを見るとわかりますが、文字列の最後にはEOSが入るため、
配列の要素数は、実際に格納する文字数より1つ多く必要になります。
もちろん、多めの要素数を指定しても問題ありません。

もしも文字列にEOSがなかった場合は、配列の先まで文字列として扱われるので、
偶然にどこかで0(EOS)が見つかるまでは、
延々と文字列が表示され続けることになり、とても困ります。

なお、配列の初期化の時に要素を省略した場合、残りには0が入るので、

ソースコード
char str[6] = { 'M', 'A', 'R', 'I', 'O' };

としても、残りに0が入り、それがEOSとなるので問題ありません。
しかし、今回は最後にEOSがあることを示すためにあえて書きました。
なお、EOSを書いた場合は要素数を省略できます。
文字列の初期化
前項では、char型の配列で文字列を取り扱えることを説明しました。
しかし、前項で行った文字列を代入する方法は非常に面倒です。
いちいち1文字ずつ区切って書かなければなりません。

C言語では、もっと直感的に文字列を初期化できる方法があります。
今まで文字列を表す時には""で囲んできましたが、これを使う方法です。
なお、"" で囲んだ文字列をとくに、文字列リテラルと呼ぶことがあります。

文字列リテラルを使うと、簡単に文字列の初期化ができます。
次のプログラムは、前項のプログラムを文字列リテラルで書き換えた例です。

ソースコード
#include <stdio.h>

int main(void)
{
    char str[] = "MARIO";
    printf("%s\n", str);
    return 0;
}

このプログラムの実行結果は次のようになります。

実行結果
MARIO

この方法では、文字列を普通に書くだけで良く、要素数を省略することもできます。
この場合、要素数は文字列の長さより1つ多く確保されますが、
多めに領域を確保したい場合には、指定することもできます。

この方法の問題点は、初期化の時にしか使えないことです。
後から文字列を代入したい場合には、1つ1つ要素に代入するしかありません。
次のプログラムは、1つ1つ要素に代入する例です。

ソースコード
#include <stdio.h>

int main(void)
{
    char str[6];
    str[0] = 'M';
    str[1] = 'A';
    str[2] = 'R';
    str[3] = 'I';
    str[4] = 'O';
    str[5] = '\0';
    printf("%s\n", str);
    return 0;
}

実行結果は、先ほどと同じになります。


本サイトについて

苦しんで覚えるC言語(苦C)は
C言語入門サイトの決定版です。
C言語の基本機能を体系立てて解説しており、
市販書籍と同等以上の完成度です。

第0部:プログラム概要編
  1. プログラムとは何か?
2章:プログラムの書き方
  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2
3章:画面への表示
  1. 文字列の表示
  2. 改行文字
  3. 練習問題3
6章:キーボードからの入力
  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6
9章:回数が決まっている繰り返し
  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9
10章:回数がわからない繰り返し
  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10
13章:複数の変数を一括して扱う
  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13
20章:複数のソースファイル
  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20

コメント
COMMENT

💬 コメント投稿欄を開く