質問: 0; i < sp.size(); i++) { cout << "sa[" << i << "] " << sp[i] << "\n"; } _getch(); return 0; } ```
回答: C2440 のエラーが出る理由ですが、 `char *p = "ABC";` の方が、このエラーが出る、より簡単な文なので、この文を使って説明します。 まず、右辺の`"ABC"`は`const char [4]`という型を持っています。配列の長さが4になるのは、最後に'\0'が付くからです。また、これは定数なので変更できず、`const`が付きます。配列は、式の中でポインタとして扱われるので、結果的に右辺は`cosnt char *`ということになります。 さて、これを左辺の`p`に代入するわけですが、`p`の型は`char *`で`const`がついていません。これがすんなり代入できてしまうと、変更できないはずの`"ABC"`の中身が、`p`を通して変更できてしまいます。これはまずいのでエラーになっています。 もとのコードで、 `const char* p[] = { "PAUL", "X", "MAC" };` とすれば、その場でのエラーは出なくなりますが、今度は`p`を引数に取っている`strptary_to_vec`関数でエラーが出るはずですので、そちらも直す必要があります。