作为我的代码的一部分,我需要在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个字符!
知道为什么会这样吗?
答案 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