为什么numericUpDown对象的输入不被视为常量?

时间:2013-08-08 02:16:45

标签: winforms user-interface c++-cli

我正在制作一个基本的GUI密码创建器,它在C ++中创建一个随机的字母,数字和符号序列(它是一个Windows窗体应用程序)。我正在使用numericUpDown对象来检索用户输入的密码长度。我试图使用该数字定义一个char数组作为长度,但我得到一个错误,说“预期的常量表达式”。我尝试将其定义为常量变量,但即使这样也行不通。有没有解决方法?

以下代码是按下“Randomize”按钮时执行的操作的一部分(提示创建然后显示密码的按钮。

const int length = System::Convert::ToInt16(numericUpDown1->Value);

然后在程序中:

char p[length];

1 个答案:

答案 0 :(得分:2)

您无法在c ++中声明具有可变大小的数组(对于c ++ / cli也是如此)。

听起来你想要生成一个随机的字符数组并将其转换为System::StringSystem::String是不可变的,所以你需要数组来操纵数据)。为此,您需要使用array<wchar_t>代替。

array<wchar_t>^ data = gcnew array<wchar_t>(System::Convert::ToInt32(numericUpDown1->Value));
// fill each character in data with a random character.
System::String^ password = gcnew System::String(data);

编辑:如果您想知道为什么wchar_t而不是char:在c ++ / cli中,wchar_t类似于System::Char,这是字符类型由.NET使用。 char类似于System::SByte(有符号字节)。