int len = GetWindowTextLengthW(hwndEdit) + 1;
wchar_t text[len];
我得到了
错误2错误C2466:无法分配常量大小为0的数组
错误3错误C2133:'text':未知大小
错误1错误C2057:预期的常量表达式
我不明白为什么它不会编译,因为GetWindowTextLengthW(hwndEdit)+ 1> 0
null + 1 = 1是不是真的?
答案 0 :(得分:5)
你想要的是不必关心内存管理,对吧?这就是你选择静态分配数组的原因。
是的,您可以使用new
作为此处推荐的答案,但我建议:
std::vector< wchar_t > text;
答案 1 :(得分:3)
首先,您使用语法声明一个静态大小的数组,但是传入一个在运行时计算的大小变量。这就是为什么它不能编译。
其次,您无法静态分配大小为0的数组,但这是另一个问题(尽管std::array
允许您这样做)。
我认为你应该使用动态分配:
wchar_t* text = new wchar_t[len]
甚至更好,请使用std::wstring
或std::vector<wchar_t >
答案 2 :(得分:0)
尝试:
wchar_t* text = new wchar_t[len];
答案 3 :(得分:0)
确实,一个抱怨零而不是非常量值的错误消息令人困惑(就像一些编译器抱怨未定义类型的int)。 VLA是C99的一个特性,仅作为某些C ++编译器的扩展(以及以不同名称部分添加到C ++ 14的方式)。 MSVC下最接近的等价物(在堆栈上分配,不调用释放函数)是_alloca。