int len = GetWindowTextLengthW(hwndEdit) + 1;
wchar_t text[len];
我得到不能分配恒定大小的数组0
错误2错误C2466:不能分配恒定大小的数组0
错误3错误C2133:“文本”:未知大小
错误1错误C2057:预期常量表达式
我不明白为什么它不会编译,因为GetWindowTextLengthW(hwndEdit)+ 1> 0
是不是真的空+ 1 = 1?
int len = GetWindowTextLengthW(hwndEdit) + 1;
wchar_t text[len];
我得到不能分配恒定大小的数组0
错误2错误C2466:不能分配恒定大小的数组0
错误3错误C2133:“文本”:未知大小
错误1错误C2057:预期常量表达式
我不明白为什么它不会编译,因为GetWindowTextLengthW(hwndEdit)+ 1> 0
是不是真的空+ 1 = 1?
首先,要使用的语法来声明静态大小的数组,但你在其中在运行时被评估的尺寸变量传递。这就是它不能编译的原因。
其次,你不能静态地分配一个大小为0的数组,但这是另一个问题(尽管std::array
允许你这么做)。
我认为你应该使用,而不是动态分配:
wchar_t* text = new wchar_t[len]
,甚至更好,使用std::wstring
或std::vector<wchar_t >
大概'的std ::矢量
@chris:好点。 –
@You可以做到这一点与'的std :: wstring'以及,如在:'的std :: wstring的文本(LEN,0); GetWindowText函数(文本[0]);'。在理论上,C++ 98/03允许失败(但它从未真正做到过)。在C++ 11中,std :: basic_string需要连续的缓冲区。 –
你想要的是不是有照顾关于内存管理,对吗?这就是为什么你选择了一个静态分配的数组。
是的,你可以使用new
这里的答案建议,然而,我建议:
std::vector<wchar_t> text;
这是事实,那抱怨零,而不是一个非常数值的错误消息是混乱(就像一些编译器抱怨未定义类型的int)。 VLA是一个C99特性,仅在某些C++编译器中以扩展的形式出现(并且在以不同名称部分添加到C++ 14的方式中)。在MSVC下最接近的等价物(在栈上分配,没有调用去分配函数)是_alloca。
[这是无效的C++](http://stackoverflow.com/questions/312116/c-array-size-dependent-on-function-parameter-causes-compile-errors) – DCoder
http:// www。 zetcode.com/gui/winapi/controls/ –
所以谁做的教程制作交流程序,而不是一个C++程序的人? –