- ベストアンサー
ポインタでの文字列操作
C-CGIを今作っていて、猫で分かるプログラミングを見ながら勉強しています。 そこで、http://www.kumei.ne.jp/c_lang/intro/no_82.htm のプログラムの変数 char name[64], address[256], sex[16], onwa[16], inken[16], seikaku[128]; をすべてポインタ型の文字列に置き換えたらエラーが起こってしまいました。 char *name, *address, *sex, *onwa, *inken, *seikaku; こんな感じに。エラーと言いましても、コンパイラが吐き出すエラーではなく、実行すると強制終了をOSから喰らいます。何故でしょうか? 原因と解決方法をどうかご指南ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>実行すると強制終了をOSから喰らいます。何故でしょうか? 初期化していないポインタを使ってメモリにアクセスしているからです。例えば不定な値が入っているポインタnameを使って*nameを書き換えようとすると、一般的にメモリアクセス違反になります。適当なバッファを用意して、バッファへのポインタをname等に代入してやる必要があります。 #もっとも、一番簡単な解決方法は元の配列を使った方法に戻す事でしょうね。あえて配列を使う理由があるのでしょうか?
その他の回答 (2)
- gimmick
- ベストアンサー率49% (134/270)
#2です。 最後の「あえて配列を使う理由があるのでしょうか?」は「あえてポインタを使う理由があるのでしょうか?」の間違いです。
- PAPA0427
- ベストアンサー率22% (559/2488)
宣言すればよいと言うものではありませんよ。 ポインタ型で宣言したら、実体の変数化、構造体で初期化しなければつかえません。 コーディングをそのまま変更しただけなら、初期化作業はされていませんので、ポインタの値が不定になっていますので、実行するとメモリ上のどこに設定していいかわからない、設定不能になるため、エラーで落ちます。