2012-08-30 12 views
8

私は4つの単語の行を含むリストボックスを持っています。 1つの行をクリックすると、これらの単語は4つの異なるテキストボックスに表示されます。 これまでのところ、私はすべての作業を持っていますが、私は文字変換で問題があります。 リストボックスの文字列はUnicodeStringですが、strtokはchar []を使用します。 コンパイラは、Can not Convert UnicodeStringをChar []に変換します。これは私がこれ用に使用しているコードです:UnicodestringをCharに変換する

私は自分のコードは、実際には、かなり悪い見ていない知っている。私はちょうどC + +でいくつかのプログラミングを学ぶ。 これをどのように変換するか教えてもらえますか?

答えて

8

strtokは実際には文字配列を変更するので、変更可能な文字配列を構築する必要があります。 UnicodeString文字列への直接参照は機能しません。

// first convert to AnsiString instead of Unicode. 
AnsiString ansiB(b); 

// allocate enough memory for your char array (and the null terminator) 
char* str = new char[ansiB.Length()+1]; 

// copy the contents of the AnsiString into your char array 
strcpy(str, ansiB.c_str()); 

// the rest of your code goes here 

// remember to delete your char array when done 
delete[] str; 
+0

に変換する私を節約するには、どうもありがとうございました!! 私はあなたのやり方がどのように機能しているかを調べるために行っていますが、効果はありました。 –

+0

私は最近、長さansiB.Length()+ 1のchar配列を作るために投稿を編集しました。これは重要。あなたがその変更を行うか、ランダムなクラッシュが発生する可能性があることを確認してください。 –

+0

プログラムを閉じた後にエラーが発生します。あなたが提供したコードを使用したとき、私はアクセス違反を受けて、Forms.hppにジャンプします。 /* TCustomForm.Destroy */inline __fastcall virtual〜TForm(void){} これは、 strや何かが間違っていますか? –

0

これは私の作品とAndiString

// Using a static buffer 
#define MAX_SIZE 256 
UnicodeString ustring = "Convert me"; 
char mbstring[MAX_SIZE]; 

    wcstombs(mbstring,ustring.c_str(),MAX_SIZE); 

// Using dynamic buffer 
char *dmbstring; 

    dmbstring = new char[ustring.Length() + 1]; 
    wcstombs(dmbstring,ustring.c_str(),ustring.Length() + 1); 
    // use dmbstring 
    delete dmbstring;