第 10 回 - 文字列操作(1)

[5/29, 2006 H.Aman]
67x27(1669bytes)   67x27(1669bytes) 【課題 1】

例題 1

大きさ 10 の文字(char)型配列 str を用意し, その中に "Ehime" という文字列を格納せよ. ただし,ダブルクォーテーション(")は文字列に含まないものとする.

コーディング例

     1	/*
     2	 * プログラミング演習 第 10 回
     3	 * [例題 1]
     4	 * (C) 2006 Hirohisa AMAN <aman@cs.ehime-u.ac.jp, aman@computer.org>
     5	 */
     6	#include <stdio.h>
     7	
     8	int main(void){
     9	  char str[10];
    10	
    11	  str[0] = 'E';
    12	  str[1] = 'h';
    13	  str[2] = 'i';
    14	  str[3] = 'm';
    15	  str[4] = 'e';
    16	  str[5] = '\0'; /* 文字列の終端記号 */
    17	
    18	  printf("文字列は %s です\n", str);
    19	
    20	  return 0;
    21	}
     
※左端の数字は行番号であり,ソースコードには含まれない点に注意!

コンパイル & 実行例

     $ gcc example10_1.c [Enter]
     $ ./a.out [Enter]
     文字列は Ehime です
     

解説

C 言語のデータ型に「文字列」は存在しない. その代わり, char 型配列に 1 文字ずつ格納したものが文字列として扱われる.

この際,次の 2 つの点に注意しなくてはならない:

  1. 文字列の 1 文字目は配列の先頭要素(添字 0)となる.
  2. 文字列の終端は特殊文字 '\0' となる.
394x63(8938bytes)
文字列の終端を意味する '\0' は非常に重要である. これが無いとコンピュータはどこまでが文字列なのかを判断できない.

例えば,

    18	  printf("文字列は %s です\n", str);
では,str[0], str[1],... の順に 1 文字ずつ表示が行われ, str[?] の内容が '\0' に等しくなった時点で完了となる.
しかしながら,'\0' の格納を忘れてしまうと 「まだ文字列は続いている」と解釈され, メモリの許す限り(あるいは運良く別の '\0' に遭遇するまで) 文字列の表示が続く.
その途中には, 文字として意味を持たない機械語が格納されている可能性もあり, 文字化けの原因となる.

この例からも分かるように, n 文字の文字列を格納 するには, 配列の長さは n+1 以上 でなければならない.
これが C 言語で文字列を扱う場合のポイントである.

なお,上のように 1 文字ずつ代入する代わりに strcpy という関数も標準で用意されているので活用するとよい:

     strcpy(str, "Ehime");
ただし,この関数を使用する場合は
#include <string.h>
をプログラムの冒頭(#include<stdio.h> の後)に記述しておかなければならない.