C言語再認識:文字定数のポイントをポインタ変数に代入できない | 技術日誌

技術日誌

ここでは,電子工作,木工などの趣味での記録を書いています。
なお当初はKMK研究所のメインテーマであるSPSのノウハウを書いてきましたが,順次SPSノウハウのページに複製を作っていきます。

 C言語の勉強を始めたころ,「文字定数"abcdefg"それ自体はその文字列のあるポイント(メモリの位置,アドレス)を表す」と理解しました。したがって,pをポインタ(メモリの位置を示す変数)として,p="abcdefg"とすると,pには文字列abcdefgのポインタが代入できました。下の図の上の枠は,古いVisual Studioでコンパイルした場合です。エラーなくコンパイルができています。ところが,新しいVisual Studioではエラーとなってコンパイルできません(下の枠)。

 新しいVisual C++では,前の記事に書いた通り型に関しても厳格になってきたようです。ここでもキャストを用いるて解決できました。

p=(char*)"abcdefg";

"abcdefg"は文字定数のポインタ(アドレス)ですから,const char*の属性を持っているので,char*の属性に変更する必要があるということです。