无法分配常量大小为0的数组

时间:2013-01-06 20:49:05

标签: c++ arrays visual-studio-2010

 int len = GetWindowTextLengthW(hwndEdit) + 1;
 wchar_t text[len];

我得到了

错误2错误C2466:无法分配常量大小为0的数组 错误3错误C2133:'text':未知大小
错误1错误C2057:预期的常量表达式

我不明白为什么它不会编译,因为GetWindowTextLengthW(hwndEdit)+ 1> 0

null + 1 = 1是不是真的?

4 个答案:

答案 0 :(得分:5)

你想要的是不必关心内存管理,对吧?这就是你选择静态分配数组的原因。

是的,您可以使用new作为此处推荐的答案,但我建议:

std::vector< wchar_t > text;

答案 1 :(得分:3)

首先,您使用语法声明一个静态大小的数组,但是传入一个在运行时计算的大小变量。这就是为什么它不能编译。

其次,您无法静态分配大小为0的数组,但这是另一个问题(尽管std::array允许您这样做)。

我认为你应该使用动态分配:

wchar_t* text = new wchar_t[len]

甚至更好,请使用std::wstringstd::vector<wchar_t >

答案 2 :(得分:0)

尝试:

wchar_t* text = new wchar_t[len];

答案 3 :(得分:0)

确实,一个抱怨零而不是非常量值的错误消息令人困惑(就像一些编译器抱怨未定义类型的int)。 VLA是C99的一个特性,仅作为某些C ++编译器的扩展(以及以不同名称部分添加到C ++ 14的方式)。 MSVC下最接近的等价物(在堆栈上分配,不调用释放函数)是_alloca。