第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を使っている人は、 もしかしたらシステム全体が停止してしまったかもしれませんね。 プログラムは、このように一歩間違えれば、 とても危険なものであることを認識しておいてください。

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

Pagetop