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

我明白了

错误 2 错误 C2466:无法分配常量大小的数组 0
错误 3 错误 C2133:“文本”:未知大小
错误 1 ​​错误 C2057:预期的常量表达式

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

null+1 = 1 不是真的吗?

4

4 回答 4

5

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

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

std::vector< wchar_t > text;

于 2013-01-06T20:54:24.800 回答
3

首先,您使用的是声明静态大小数组的语法,但您传入了一个在运行时评估的大小变量。这就是它不编译的原因。

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

我认为您应该改用动态分配:

wchar_t* text = new wchar_t[len]

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

于 2013-01-06T20:52:05.187 回答
0

尝试:

wchar_t* text = new wchar_t[len];
于 2013-01-06T20:52:33.020 回答
0

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

于 2013-01-06T21:00:50.550 回答