int len = GetWindowTextLengthW(hwndEdit) + 1;
wchar_t text[len];
我明白了
错误 2 错误 C2466:无法分配常量大小的数组 0
错误 3 错误 C2133:“文本”:未知大小
错误 1 错误 C2057:预期的常量表达式
我不明白为什么它不会编译,因为 GetWindowTextLengthW(hwndEdit) + 1 > 0
null+1 = 1 不是真的吗?
int len = GetWindowTextLengthW(hwndEdit) + 1;
wchar_t text[len];
我明白了
错误 2 错误 C2466:无法分配常量大小的数组 0
错误 3 错误 C2133:“文本”:未知大小
错误 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::wstring
或std::vector<wchar_t >
尝试:
wchar_t* text = new wchar_t[len];
确实,抱怨零而不是非常量值的错误消息令人困惑(就像某些编译器抱怨未定义类型的 int 一样)。VLA 是 C99 功能,仅在某些 C++ 编译器中作为扩展存在(并且正在以不同的名称部分添加到 C++14 中)。MSVC 下最接近的等价物(在堆栈上分配,不调用释放函数)是 _alloca。