例題 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 つの点に注意しなくてはならない:
例えば, 18 printf("文字列は %s です\n", str);では,str[0], str[1],... の順に 1 文字ずつ表示が行われ, str[?] の内容が '\0' に等しくなった時点で完了となる. しかしながら,'\0' の格納を忘れてしまうと 「まだ文字列は続いている」と解釈され, メモリの許す限り(あるいは運良く別の '\0' に遭遇するまで) 文字列の表示が続く. その途中には, 文字として意味を持たない機械語が格納されている可能性もあり, 文字化けの原因となる.
この例からも分かるように,
n 文字の文字列を格納
するには,
配列の長さは
n+1 以上
でなければならない. なお,上のように 1 文字ずつ代入する代わりに strcpy という関数も標準で用意されているので活用するとよい: strcpy(str, "Ehime");ただし,この関数を使用する場合は #include <string.h>をプログラムの冒頭(#include<stdio.h> の後)に記述しておかなければならない. |