不能分配常量大小为0的数组

cannot allocate an array of constant size 0

本文关键字:数组 小为 不能分 分配 常量 不能      更新时间:2023-10-16
 int len = GetWindowTextLengthW(hwndEdit) + 1;
 wchar_t text[len];

错误2:不能分配常量大小为0的数组
错误3:'text':未知大小
错误1错误C2057:期望的常量表达式

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

null+1 = 1不是真的吗?

您想要的是不必关心内存管理,对吗?这就是为什么选择静态分配数组。

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

std::vector< wchar_t > text;

首先,您正在使用声明静态大小数组的语法,但您传递了在运行时评估的大小变量。这就是为什么它不能编译。

第二,你不能静态地分配一个大小为0的数组,但这是另一个问题(尽管std::array允许你这样做)。

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

wchar_t* text = new wchar_t[len]

或者更好,使用std::wstringstd::vector<wchar_t >

尝试:

wchar_t* text = new wchar_t[len];

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