将char-array转换为System :: String ^

时间:2016-04-27 21:21:02

标签: .net string char c++-cli

作为我的代码的一部分,我需要在textBox中输出一个已加密的8个字符的字符串。所以我需要将一个包含8个字符的数组转换为System String^。我尝试了以下方法:

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

textBox3->Text = gcnew String(result);

但是,textBox显示的字符超过8个。 8个字符将根据输入而改变,其余字符将保持不变。 例, 如果我的输入是

  

andrew12

,textBox中的输出是

  

T)W +“Ziz BVÎpé

但是,如果我的输入是

  

andrew33,输出将是:   A1-1` + Ta BVÎpé

最后6个字符是相同的..但不应该在这里首先。 重要的是前8个字符!

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

在填充char数组时,要将其用作字符串,请始终确保最后一个有效字节后的字节为空。更多信息: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,好像result是一个c风格的字符串。不幸的是result不是c风格的字符串,因为它没有被空终止。

改为使用:

char result[9];

使变量result并为9个字符分配空间。

result[8] = '\0';

null终止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

创建一个新字符串