第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) を確保することが大事です。
< 前のページへ 次のページへ >-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針