C言語の勉強を始めたころ,「文字定数"abcdefg"それ自体はその文字列のあるポイント(メモリの位置,アドレス)を表す」と理解しました。したがって,pをポインタ(メモリの位置を示す変数)として,p="abcdefg"とすると,pには文字列abcdefgのポインタが代入できました。下の図の上の枠は,古いVisual Studioでコンパイルした場合です。エラーなくコンパイルができています。ところが,新しいVisual Studioではエラーとなってコンパイルできません(下の枠)。
新しいVisual C++では,前の記事に書いた通り型に関しても厳格になってきたようです。ここでもキャストを用いるて解決できました。
p=(char*)"abcdefg";
"abcdefg"は文字定数のポインタ(アドレス)ですから,const char*の属性を持っているので,char*の属性に変更する必要があるということです。