例題 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> の後)に記述しておかなければならない. |