アプリ版:「スタンプのみでお礼する」機能のリリースについて

char *c=new char("abcd");
のようにして、cに"abcd"のポインタを代入しようとしたのですが、

error C2440: '初期化中' : 'const char [5]' から 'char' に変換できません。

と出てきてうまくいきません。
どの様にすれば、メモリ確保と同字に文字列で初期化できるのでしょうか?

A 回答 (5件)

char *c = "abcd";


で初期化できます。
    • good
    • 0
この回答へのお礼

すみません質問を間違えていました。
正しくは、

char *c;
c=new char("abcd");

でした。
ですので、変数宣言の時に初期化するやり方は使えないのです。
宜しくお願いします。

お礼日時:2009/04/08 08:38

newでは無理だと思います。


strdupではだめなのでしょうか?
    • good
    • 0
この回答へのお礼

ここへまとめて皆さんへ返信させていただくことをご了承ください。
自己解決しました。

c="abcd";

で、出来るようです。

何故これをしたかったという理由は、
void funv(char *c=0){
}
という関数を作っており、もし、c==0なら、この変数に入力がないなら、このポインタに代入したかったからなんです。

皆さんどうも有り難うございました。

お礼日時:2009/04/09 00:32

・「ど~しても char * じゃないとヤダ」ということがない限り, std::string を使えばいいのでは?


・なぜ char c[] = "abcd"; ではダメなのか.
    • good
    • 0

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*が必要であるときはあまり使えません。
    • good
    • 0

どうしてもやりたいなら...



char* c = std::strcpy(new char[5], "abcd");

とでもしてください。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!