0

次のように構築したC +アレイがいくつかあります。

std:array<const char *, 4) test1 = {abc.c_str(), def.c_str(), ghi.c_str()};

abc、はdef_ghistd::string

この配列を、次のプロトタイプを持つ別の関数に渡す必要があります。 (int argc, char * argv[])

non-const char*上記の関数に渡すことができるように配列を変更するにはどうすればよいですか。または、関数を const char* に変更する必要があります。この関数コードは私のものではなく、現在も利用できないため、関数がどこかで char* を変更しようとしているかどうかはわかりません。
しかし、いずれにせよ、非 const char* 配列を上記の関数に渡すにはどうすればよいでしょうか?

4

2 に答える 2

2

関数が文字列を変更する可能性がある場合は、関数が使用する可能性のある最大サイズに文字列のサイズを変更し、戻ったときに再度サイズを変更する必要があります。

abc.resize(max);
DoSomething(&abc[0]);
abc.resize(strlen(&abc[0]));

関数が文字列を変更しないという事実を知っている場合、関数プロトタイプは嘘をついています。あなたは横になることができます:

DoSomething(const_cast<char *>(abc.c_str()));
于 2012-05-04T05:05:33.993 に答える
1

これはうまくいくはずです

abc.append(1, 0); // guarantee NUL termination
def.append(1, 0);
ghi.append(1, 0);
std:array<char *, 4> test1 = {abc.data(), def.data(), ghi.data()};

また

abc.append(1, 0);
def.append(1, 0);
ghi.append(1, 0);
std:array<char *, 4> test1 = {&abc[0], &def[0], &ghi[0]};
于 2012-05-04T04:42:19.193 に答える