[[07年度-C言語講座]]
*文字列について [#t09bf3f0]

**説明 [#xed16b06]
[[こちらを読んでください]]
整数型がintであるのに対して、文字型はcharで表します。一つのchar型の変数には一文字を格納できます。~
大体は配列でchar a[10]のように定義して、文字列として扱います。配列で10文字分確保すれば10文字までの文章なら入れられますね?~
~
~
【補足】07/06/23 20:00~
文字列は、『最後の要素がヌル文字(空白文字, '\0')である』という規則があります。~
ヌル文字を含めて10文字なので、自由に格納できる文字は9文字までです。~
char a[3] = {'A', 'B', 'C'};~
char a[3] = {'A', 'B'};~
char a[3] = {'A', 'B', '\0'};~
char a[3] = {'A', '\0'};~
だと、上2つはchar型の配列。下2つは文字列であると解釈されます。~
ちなみに、char型の配列中の文字列とは、『最初に出てきたヌル文字まで』をさします。~
char a[7] = {'A', 'B', '\0', 'C', 'D', '\0'};
は、文字列としては、"AB"と解釈されます。~
ちょっと紛らわしそうだったので補足しました。~
by ほへい~
~
~
次に文字配列への値の代入方法です。~
char a[10]と定義したとすると、a[0]='A'のようにシングルコーテーションで囲んだ部分を代入します。~
配列に一気に代入するときはchar a[3]={'A','B','C'}のように書くとa[0]にA,a[1]にB、a[2]にCが代入されます~
char bを定義すればb = a[0]のように整数型と同様に代入するのも可能です~
~
~
【補足】07/06/22 21:17~
char a[3] = {'A', 'B', 'C'};~
char a[3] = {'A', 'B', '\0'};~
char a[3] = "AB";      // 次の要素に'\0'が自動的に付加される~
上述のとおり、一番上はchar型の配列です。。下2つはどちらも文字列で、まったく同一の配列になります。~
一番下の書き方は多少楽ができます。ただし、~
char a[3] = "ABC";~
と書くと、~
char a[3] = {'A', 'B', 'C', '\0'};~
と同じことなので配列の要素数を超えてしまいます。~
by ほへい~
~
~
~
次に文字の出力及び入力についてです~
printf("文字は%c",a[1])と書けば、文字はBと出力されます。(上の例のように代入したときです)~
~
scanf("%c",a)と書けばa[0]に入力から文字を代入できます。~
scanf("%s",a)と書いてABCと入力すると、char a[3] = {'A','B','C'}と同じように代入できます~
~
【補足】07/06/22 21:17~
scanf("%s", a)と書いて ABC と入力すると、~
a[0] = 'A';~
a[1] = 'B';~
a[2] = 'C';~
a[3] = '\0';~
と代入されます。ですので、aが3以下の配列だとバグを含むプログラムになります。~
ですので、char a[3] = {'A', 'B', 'C'}とは同じではないはずです。~
by ほへい~
~
~
~
* scanfは配列を使う前までは&aのように書いていましたが、何故今回はaでいいのでしょうか?考えてみてください。
~
**演習問題 [#a5adf608]
strcpy関数、strcat関数と同様に働く関数を作成しなさい。~
strcpyについては,簡単のために配列の要素数を関数に与えてかまわないです。~
~
ポインタと関数の復習にもなるので是非やってください。~
strcpyとは何か!に関してはググってください。

**回答例 [#s35dbfe9]
-[[strcpy]]
-[[strcat]]
~
**コメント・質問など [#v9ec5e95]
#pcomment(below)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS