プログラムにエラーがあります:「文字列から文字*に変換できませんでした」。この変換を実行するにはどうすればよいですか?
_const char*
_で解決できる場合は、その上でc_str()
メソッドを呼び出すだけです。
_const char *mycharp = mystring.c_str();
_
本当に変更可能な_char*
_が必要な場合は、文字列のバッファのコピーを作成する必要があります。 vector
は、これを処理するための理想的な方法です。
_std::vector<char> v(mystring.length() + 1);
std::strcpy(&v[0], mystring.c_str());
char* pc = &v[0];
_
str.c_str()
を呼び出して_const char*
_を取得します。
_const char *pch = str.c_str();
_
結果の_const char*
_は、str
が変更または破棄されるまでのみ有効であることに注意してください。
ただし、const
以外が本当に必要な場合は、_std::string
_を使用しないでください。これは、背後にある基になるデータを変更できるように設計されていないためです。つまり、_&str[0]
_または&*str.begin()
を呼び出すことにより、そのデータへのポインターを取得できます。
これの醜さは特徴と見なされるべきです。 C++ 98では、_std::string
_は連続したメモリのチャンクにデータを格納する必要さえないので、これはあなたの顔に爆発するかもしれません。変更されたと思いますが、これがC++ 03向けか、次の標準バージョンのC++ 1x向けかは覚えていません。
これを行う必要がある場合は、代わりに_std::vector<char>
_の使用を検討してください。同じ方法でデータにアクセスできます:_&v[0]
_または&*v.begin()
。
//assume you have an std::string, str.
char* cstr = new char[str.length() +1];
strcpy(cstr, str.c_str());
//eventually, remember to delete cstr
delete[] cstr;
string
からchar*
(つまりconst char*
ではない)に移動したいので、これを行うことができますが、注意が必要です。ドラゴンはここにあります。
string foo = "foo";
char* foo_c = &foo[0];
文字列の内容を変更しようとする場合、あなたは自分自身で元気です。
string
オブジェクトでc_str()
メソッドを使用して、const char*
ポインターを取得します。警告:string
オブジェクトが変更または破棄された場合、返されたポインターは無効になります。
_const char*
_が適している場合は、これを使用してください:myString.c_str()
_char*
_が本当に必要で、_char*
_が変更されないことが確実にわかっている場合は、これを使用できます:const_cast<char*>(myString.c_str())
_char*
_が変更される可能性がある場合は、文字列を別のものにコピーして、代わりにそれを使用する必要があります。それ以外のものは_std::vector
_または_new char[]
_かもしれませんが、それはあなたのニーズに依存します。
std::string::c_str()
は、string
オブジェクトと同じ内容のc文字列を返します。
std::string str("Hello");
const char* cstr = str.c_str();