第7章 C言語のポインタ2 ~charポインタとchar配列~
char ポインタ型は、他の型をポインタとして宣言した場合と、 使われ方がかなり違ってきます。この章では、ポインタの中でも特殊な存在である、 char ポインタに絞って説明していきます。
次の記述を打ち込んで、実行してみてください。
— リスト18–
#include <stdio.h> #include <string.h> void main() { char array[7]; char *ptr; /** * char配列に、文字列をコピーする */ strcpy(array, "abcdef"); /** * char ポインタに、char配列の先頭のアドレスをコピーする */ ptr = &(array[0]); (1) /** * char 配列、char ポインタをそれぞれ文字列形式で表示する */ printf(" array = %s\n ptr = %s\n", array, ptr); }
(1)のところが、ちょっと難しいことかと思います。 これは、コメントの通りで、char 配列の先頭の住所(アドレス)を、ptr に代入しています。
実行結果は、どうなりましたか? 表示結果だけを見ると、charポインタ型のptr を、 char 配列と同じように扱えるように見えるかもしれません。
では、プログラムを次のように変更してみてください。
— リスト18`–
#include <stdio.h> #include <string.h> void main() { char array[7]; char *ptr; /** * char配列に、文字列をコピーする */ strcpy(array, "abcdef"); /** * char ポインタに、文字列をコピーする */ strcpy(ptr, "ghijkl"); /** * char 配列、char ポインタをそれぞれ文字列形式で表示する */ printf(" array = %s\n ptr = %s\n", array, ptr); }
どうなりましたか? プログラムが異常終了したことかと思います。
これは、char 配列とは違い char ポインタが、箱を用意するわけではないことが原因です。 変なアドレスを指している ptr (ポインタ型の変数は、 初めはどこのアドレスを指しているか決まっていません)に対して、 文字列をコピーしようとしたのです。
Windows95を使っている人は、 もしかしたらシステム全体が停止してしまったかもしれませんね。 プログラムは、このように一歩間違えれば、 とても危険なものであることを認識しておいてください。
< 前のページへ 次のページへ >-
IS 559680 / ISO27001
認証範囲 本社、芝大門オフィス情報セキュリティ基本方針 -
個人情報保護方針
個人情報の取扱いについて
保有個人データ又は
第三者提供記録に関する
事項の周知について
特定個人情報の取扱いについて -
FS 671851 / ISO9001
認証範囲 本社、芝大門オフィス品質方針