2016-04-27 22 views
-3

コードの一部として、暗号化された8文字の文字列をtextBoxに出力する必要があります。だから、私はシステムのString^に8文字の配列を変換する必要があります。私は、次のことを試してみました:char-arrayをSystem :: Stringに変換する^

char result[8]; 
for(int i=0; i<8; i++) 
{ 
    result[i] = (char)DecimalCypher[7-i]; 
} 

textBox3->Text = gcnew String(result); 

しかしテキストボックスが8文字以上を示しています。入力に応じて8文字が変わり、残りの文字はそのまま残ります。 例、 私の入力が

andrew12

ある場合、テキストボックスに出力しかし

T)W +」ジズBVI PEの

あります入力が

の場合

andrew33、出力は次のようになります。 A1-1` + TaのBVI PEの

最後の6つの文字が...同じですが、最初の場所で、ここですべきではありません。 最初の8文字は重要です!

なぜこのようなことが起こっているのですか?

+1

を持つ新しい文字列を作成します。 https://msdn.microsoft.com/en-us/library/bb384865.aspx – lcs

+1

'char result [8];'をchar result [9] = {0};に変更します。 –

+0

あなたはすべてのc-スタイルの文字列。 – user4581301

答えて

0

char配列を文字列として使用する目的で文字配列を埋め込むときは、最後の有効なバイトの後のバイトが必ずnullであることを確認してください。もっとここに:What is a 'Null Terminated String' ?

char result[8]; 

変数resultを行い、8つの文字のためのスペースを割り当てます。

for(int i=0; i<8; i++) 
{ 
    result[i] = (char)DecimalCypher[7-i]; 
} 

は、resultで8文字をすべて埋めます。

textBox3->Text = gcnew String(result); 

resultはCスタイルの文字列だったかのように、新しいString resultにします。残念ながらresultはヌル終了していないため、Cスタイルの文字列ではありません。

代わりに使用します。

char result[9]; 

は、変数resultを行い、9つの文字のためのスペースを割り当てます。

result[8] = '\0'; 

ヌル終了result

for(int i=0; i<8; i++) 
{ 
    result[i] = (char)DecimalCypher[7-i]; 
} 

resultに8文字を埋め込みます。 9番はnullで使用されます。

textBox3->Text = gcnew String(result); 

はあなたが管理する文字列に管理されていない文字列をマーシャリングする必要がCスタイルの文字列result

関連する問題