web-dev-qa-db-ja.com

C ++で文字列をchar *に変換するにはどうすればよいですか?

プログラムにエラーがあります:「文字列から文字*に変換できませんでした」。この変換を実行するにはどうすればよいですか?

22
Ptichka

_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];_
28

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()

15
sbi
//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; 
9
Vatsan

stringからchar*(つまりconst char*ではない)に移動したいので、これを行うことができますが、注意が必要です。ドラゴンはここにあります。

string foo = "foo";
char* foo_c = &foo[0];

文字列の内容を変更しようとする場合、あなたは自分自身で元気です。

3
John Dibling

stringオブジェクトでc_str()メソッドを使用して、const char*ポインターを取得します。警告:stringオブジェクトが変更または破棄された場合、返されたポインターは無効になります。

3
aschepler

_const char*_が適している場合は、これを使用してください:myString.c_str()

_char*_が本当に必要で、_char*_が変更されないことが確実にわかっている場合は、これを使用できます:const_cast<char*>(myString.c_str())

_char*_が変更される可能性がある場合は、文字列を別のものにコピーして、代わりにそれを使用する必要があります。それ以外のものは_std::vector_または_new char[]_かもしれませんが、それはあなたのニーズに依存します。

2
Dialecticus

std::string::c_str() は、stringオブジェクトと同じ内容のc文字列を返します。

std::string str("Hello");
const char* cstr = str.c_str();
1
Bertrand Marron