配列とポインタについて
文字配列
C言語にはVisualBasicのString型のような文字列を格納できるデータ型が存在しません。そこで、文字列を扱うにはchar型の配列が使われます。宣言はchar型の配列です。
char data[ 36 ];
これでchar型の36個の領域が作成できました。「I love JAPAN.」という文を格納すると、data[0]には「I」、data[1]には「 」・・・data[11]には「N」、data[12]には「.」が格納されることになります。
これが内部変数の配列の場合は、data[13]以降には何が入っているかわかりません。C言語ではデータの終端を示すために「\0(0x00)」が付与され、そこでデータの終わりを認識します。つまり、13文字のデータである場合には14文字目(data[13])に「\0」が付与されるのです。
よって、文字数が明確である場合に文字配列のサイズを文字数分にしてしまってはいけないのです。その文字列を処理で使用した場合には、「\0」があるところまで参照しようとしてしまうため、膨大な情報を扱おうとしてバッファオーバーフローを起こしてしまいます。プログラミングする際には、扱う文字列の最大長を考慮し要素数を設定することが必要となってきます。ファイルなどを読み込み、それに全角文字が含まれる場合には、1文字で2バイトとなりますのでそちらも考慮する必要があるでしょう。
また、先ほどの説明ではdata[0]から1文字ずつ文字列を格納するようなイメージで濁して記述しましたが、実際にはポインタや標準関数を使用して文字列を格納することになります。その説明はポインタの項で説明しますので、現段階では仕組みをご理解ください。