にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

文字列の扱いについて勘違い

今日、とあるコードを読んでいて、以下のような式を見た。

const char *str = NULL;
str = "hoge hoge";

あれ、こんな代入ってできるんだっけ?と思ったが、以下のダメなコードと勘違いしていたようです。

char str[10];
str = "hoge hoge";

前者は、char型のポインタを宣言して、そのポインタの指す先に、OSがどこかに確保した"hoge hoge"という文字配列の先頭アドレスを指定しているだけなので問題なし。
一方、後者は、配列strに"hoge hoge"を代入したいように見えるが、strはポインタではなく固定で確保されたアドレスなので、そこに他のどこかの場所に作られた"hoge hoge"という文字配列アドレスを突っ込もうとしているので、型の不一致でコンパイルエラーが出る。
考えてみれば当たり前のことだけど再確認できてよかった。