0

私は次のようなことをしたい:

string result;
char* a[100];
a[0]=result;

result.c_str() は const char* でなければならないようです。これを行う方法はありますか?

4

6 に答える 6

5

文字列の最初の文字のアドレスを取得できます。

a[0] = &result[0];

これは C++11 で動作することが保証されています。(内部の文字列表現は、C スタイルの文字列のように連続し、null で終了する必要があります)

C++03 では、これらの保証は存在しませんが、一般的な実装はすべて機能します。

于 2013-04-24T04:39:16.550 に答える
1
string result;
char a[100] = {0};
strncpy(a, result.c_str(), sizeof(a) - 1);
于 2013-04-24T04:39:30.697 に答える
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];
于 2013-04-24T04:41:58.447 に答える
0

昔ながらの方法:

#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!
于 2013-04-24T04:47:08.310 に答える
0

できるよ:

char a[100];
::strncpy(a, result.c_str(), 100);

null 終端に注意してください。

于 2013-04-24T04:38:27.480 に答える
0

本当に、本当にこれを避けることができない場合は、C++ が提供するものをすべて捨てて、生の配列やstrncpy.

合理的な可能性の 1 つは、データを文字列からベクトルにコピーすることです。

char const *temp = result.c_str();
std::vector<char> a(temp, temp+result.size()+1);

ただし、通常はデータを文字列に残すことができます。文字列のデータへの非 const ポインターが必要な場合は、&result[0].

于 2013-04-24T04:52:23.940 に答える