こんにちは。
最近、Windows10の上でVisualStudio2019を使用してC言語のプログラミングをしていると気になったことができたので質問させていただきました。
気になったことというのは「文字列リテラル」についてです。
普段、自分はUbuntuの上でgccを用いてプログラミングしているのですが、いつもは文字列リテラルのアドレスを持つポインタを初期化する際、次のようなコードを書いていました。(gcc -dumpversionで調べると、gccのバージョンは7でした)
コード:
int main(void){
char* str = "hello, world";
return 0;
}
このコードはgccでは問題なくコンパイルされました。
しかし、これをVisualStudioでためしてみると次のようなエラーが出ます。
コード:
'初期化中': 'const char [13]' から 'char *' に変換できません。
僕は文字列リテラルは読み込み専用領域に配置されると学んだので(環境によっては違うのかもしれませんが...)VisualStudioの対応が正しいと思うのですが、gccによると問題ないみたいです。
gccの側で文字列リテラルの中身を書き換えようとした場合はしっかりsegmentation faultがでます。
つまり、文字列リテラルはconst charの配列ということですよね?
これはgccの手抜き(??)という認識で正しいのでしょうか?
どなたか知識をお貸しください。