C错误:表达式必须有一个常量值(windows代码示例)

我一直在尝试编译代码“编辑控件”

从这里:http: //zetcode.com/gui/winapi/controls/

现在我的编译器(VS2013)不会让我编译此代码同时给我这个错误:错误574错误C2057:预期的常量表达式

代码部分:

if (HIWORD(wParam) == BN_CLICKED) { int len = GetWindowTextLengthW(hwndEdit) + 1; wchar_t text[len]; GetWindowTextW(hwndEdit, text, len); SetWindowTextW(hwnd, text); } 

编辑:

我使用此代码来解决问题:

 wchar_t *text = calloc(len, sizeof(wchar_t)); if (text != NULL) { // STUFF } free(text); 

虽然C99支持VLA Microsoft不支持它们。

这意味着

 wchar_t text[len]; 

与Visual Studio 2013 c编译器无效。

您可以使用malloc来执行此操作:

 wchar_t *text = malloc(sizeof(wchar_t)*len); if (text != NULL) { // STUFF } free(text); 

编辑

请注意, malloc ated内存未初始化,就像堆栈分配的VLA一样,因此如果需要,必须使用以下内存:

 memset(text, 0, sizeof(whar_t)*len); 

或使用calloc而不是malloc:

 wchar_t *text = calloc(len, sizeof(wchar_t)); if (text != NULL) { // STUFF } free(text);