私は次のようなことをしたい:
string result;
char* a[100];
a[0]=result;
result.c_str() は const char* でなければならないようです。これを行う方法はありますか?
私は次のようなことをしたい:
string result;
char* a[100];
a[0]=result;
result.c_str() は const char* でなければならないようです。これを行う方法はありますか?
文字列の最初の文字のアドレスを取得できます。
a[0] = &result[0];
これは C++11 で動作することが保証されています。(内部の文字列表現は、C スタイルの文字列のように連続し、null で終了する必要があります)
C++03 では、これらの保証は存在しませんが、一般的な実装はすべて機能します。
string result;
char a[100] = {0};
strncpy(a, result.c_str(), sizeof(a) - 1);
これを行うには、「copy」というメンバー関数 (メソッド) があります。
ただし、最初にバッファを作成する必要があります。
このような
string result;
char* a[100];
a[0] = new char[result.length() + 1];
result.copy(a[0], result.length(), 0);
a[0][result.length()] = '\0';
(参考文献: http://www.cplusplus.com/reference/string/basic_string/copy/ )
ところで、私はあなたが意味するのだろうか
string result;
char a[100];
昔ながらの方法:
#include <string.h>
a[0] = strdup(result.c_str()); // allocates memory for a new string and copies it over
[...]
free(a[0]); // don't forget this or you leak memory!
できるよ:
char a[100];
::strncpy(a, result.c_str(), 100);
null 終端に注意してください。
本当に、本当にこれを避けることができない場合は、C++ が提供するものをすべて捨てて、生の配列やstrncpy
.
合理的な可能性の 1 つは、データを文字列からベクトルにコピーすることです。
char const *temp = result.c_str();
std::vector<char> a(temp, temp+result.size()+1);
ただし、通常はデータを文字列に残すことができます。文字列のデータへの非 const ポインターが必要な場合は、&result[0]
.