第4章 C言語の配列 ~intの配列とcharの配列~

休憩室

 今回も、またまた実験です。20個分のchar配列に20文字ぴったし入れてしまったら、 一体何が起きてしまうのでしょうか?

 これは、実際にやってみた方がわかりやすいですね。 次のようなプログラムを作ってみてください。

— リスト14 —

#include <stdio.h>
#include <string.h>

void main( )
{
        char  str1[20];
        char  str2[20];

        strcpy(str1, "第4章はC言語の配列");

        printf(" str1 = [%s]\n str2 = [%s]\n\n", str1, str2);

        strcpy(str2, "C言語研修マニュアル");

        printf(" str1 = [%s]\n str2 = [%s]\n", str1, str2);
}

 実行結果はどうなりましたか?

 str1 = [第4章はC言語の配列]
 str2 = [ ] 

 str1 = [ ]
 str2 = [C言語研修マニュアル] 

 と出てきてると助かります(コンパイラによっては、結果が変わりますから)。 まるで、str1の中身が消えてなくなってしまったようですね。 これは、以下のようなことが原因なのです。

 となったからです(この場合、後から宣言したstr2が前に存在してます)。

 これを、俗にメモリ破壊と呼びます。 str2へのコピーで、意図していないstr1の先頭(第4章の第の前半)を破壊してしまっています。

 しかし、まだこの程度は甘い方です。 同じプロジェクトの中で、他の人が使ってる変数まで壊してしまっていたら、 取り返しの付かないことになってしまいます。その人は、原因不明のエラーに悩むことでしょう。

 このように文字列処理はたいへん危険なものなのです。 ですから、文字列用のchar配列は、充分なサイズ (注16) を確保することが大事です。

< 前のページへ
お問い合わせ
  • ようかん
  • SG Labs(エスジー ラボ)
  • ITERACY
  • RiceLog(ライスログ)
  • Salesforce導入コンサルティング
  • SES営業向け用語講座

Pagetop