- ベストアンサー
charポインタへの文字列による動的確保
char *c=new char("abcd"); のようにして、cに"abcd"のポインタを代入しようとしたのですが、 error C2440: '初期化中' : 'const char [5]' から 'char' に変換できません。 と出てきてうまくいきません。 どの様にすれば、メモリ確保と同字に文字列で初期化できるのでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
newでは無理だと思います。 strdupではだめなのでしょうか?
その他の回答 (4)
- jacta
- ベストアンサー率26% (845/3158)
どうしてもやりたいなら... char* c = std::strcpy(new char[5], "abcd"); とでもしてください。
- bluecampus
- ベストアンサー率66% (138/209)
No.2の方もおっしゃっていますが、newで一気に文字列を格納できるようなものはありません。 自力でやるしかないです。 char* c; const char* str = "abcd"; c = new char[strlen(str) + 1]; strcpy(c, str); strdup関数の場合、newではなくmallocで領域を確保します。 char* c; c = strdup("abcd"); ここで気をつけなければならないのは、mallocなのでfreeで領域を解放する必要があることです。 また、C++であるので、STLのstringを使えば動的確保等はすべてstringクラスが面倒をみるので便利です。 std::string s; s = "abcd"; const char* c = s.c_str(); ただし、char*が必要であるときはあまり使えません。
- Tacosan
- ベストアンサー率23% (3656/15482)
・「ど~しても char * じゃないとヤダ」ということがない限り, std::string を使えばいいのでは? ・なぜ char c[] = "abcd"; ではダメなのか.
- massano1
- ベストアンサー率40% (4/10)
char *c = "abcd"; で初期化できます。
お礼
すみません質問を間違えていました。 正しくは、 char *c; c=new char("abcd"); でした。 ですので、変数宣言の時に初期化するやり方は使えないのです。 宜しくお願いします。
お礼
ここへまとめて皆さんへ返信させていただくことをご了承ください。 自己解決しました。 c="abcd"; で、出来るようです。 何故これをしたかったという理由は、 void funv(char *c=0){ } という関数を作っており、もし、c==0なら、この変数に入力がないなら、このポインタに代入したかったからなんです。 皆さんどうも有り難うございました。