string を charの配列につめかえるには?

解決


TOX  2006-03-02 16:50:00  No: 60864  IP: [192.*.*.*]

複数の string 文字列を char *const につめかえたいのですがどうすればよいか教えてください。
string str1, str2, str3;

char *const str[] = {str1, str2, str3};
って感じに詰め替えたいです。
よろしくお願いします。

編集 削除
Blue  2006-03-02 17:02:10  No: 60865  IP: [192.*.*.*]

stringとは STL の std::string でしょうか?

char *const str[] = {str1.c_str(), str2.c_str(), str3.c_str()};

でいけるかもしれません。

編集 削除
Blue  2006-03-02 17:03:13  No: 60866  IP: [192.*.*.*]

あ〜
> char *const 
じゃん。やっぱだめすね。
const char* ならいけますけど。

編集 削除
TOX  2006-03-02 18:50:45  No: 60867  IP: [192.*.*.*]

stringとは STL の std::string です。

編集 削除
RAPT  2006-03-02 22:16:36  No: 60868  IP: [192.*.*.*]

char s[BUFSIZ];
strncpy(s, str.c_str(), BUFSIZ);
char *const str[] = {s};
(動作未確認)
なんてのは邪道かな?

編集 削除
TOX  2006-03-03 10:09:31  No: 60869  IP: [192.*.*.*]

下記のようなロジックでつめかえることができました。
PARTさんありがとうございました
string str1 = "a";
string str2 = "b";
string str3 = "c";

char buff1[BUFFSIZE];
char buff2[BUFFSIZE];
char buff3[BUFFSIZE];
strncpy(buff1, str1.c_str(), BUFFSIZE);
strncpy(buff2, str2.c_str(), BUFFSIZE);
strncpy(buff3, str3.c_str(), BUFFSIZE);

char *const str[] = {buff1, buff2, buff3};

編集 削除
YuO  2006-03-03 13:03:25  No: 60870  IP: [192.*.*.*]

解決後に書いて悪いのですが,
std::string::copyってのがありますが……。

編集 削除
RAPT  2006-03-04 00:58:25  No: 60871  IP: [192.*.*.*]

書いてみました。

std::string str1 = "test1";
char s[BUFSIZ];
str1.copy(s, BUFSIZ);
char *const str[] = { s };
(動作未確認)

編集 削除
Blue  2006-03-04 01:26:44  No: 60872  IP: [192.*.*.*]

> str1.copy(s, BUFSIZ);
は終端文字入れないので

std::string::size_type i = str1.copy(s, BUFSIZ);
s[i] = '\0';

のような操作が必要かも。

編集 削除
RAPT  2006-03-04 09:24:29  No: 60873  IP: [192.*.*.*]

なるほど。では、事前に初期化しておけば、それも、アリと考えていいのかな。
char s[BUFSIZ] = {0};
str1.copy(s, BUFSIZ - 1];
とか。(VC++6sp6で動作確認済)

編集 削除