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

解決


TOX  2006-03-03 01:50:00  No: 60864

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

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


Blue  2006-03-03 02:02:10  No: 60865

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

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

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


Blue  2006-03-03 02:03:13  No: 60866

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


TOX  2006-03-03 03:50:45  No: 60867

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


RAPT  2006-03-03 07:16:36  No: 60868

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


TOX  2006-03-03 19:09:31  No: 60869

下記のようなロジックでつめかえることができました。
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 22:03:25  No: 60870

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


RAPT  2006-03-04 09:58:25  No: 60871

書いてみました。

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


Blue  2006-03-04 10:26:44  No: 60872

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

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

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


RAPT  2006-03-04 18:24:29  No: 60873

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加