Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么VS要求数组大小为常量,而MinGW不要求?有办法解决吗?_C++_Visual Studio_Mingw - Fatal编程技术网

C++ 为什么VS要求数组大小为常量,而MinGW不要求?有办法解决吗?

C++ 为什么VS要求数组大小为常量,而MinGW不要求?有办法解决吗?,c++,visual-studio,mingw,C++,Visual Studio,Mingw,我已经将我使用code::blocks编写的Mingw中的一些代码移植到visual studio及其编译器,它发现了许多错误,我的数组大小必须保持不变!为什么VS需要一个恒定的大小而mingw不需要 e、 g len变量用红色下划线表示这是一个错误,并表示“预期常量表达式” 我能想到的唯一办法就是 char* szModiPath = new char[len]; delete[] szModiPath; 我是否必须将所有内容都更改为动态,或者在VS中是否有其他方式 为什么VS需要一个恒定的

我已经将我使用code::blocks编写的Mingw中的一些代码移植到visual studio及其编译器,它发现了许多错误,我的数组大小必须保持不变!为什么VS需要一个恒定的大小而mingw不需要

e、 g

len变量用红色下划线表示这是一个错误,并表示“预期常量表达式”

我能想到的唯一办法就是

char* szModiPath = new char[len];
delete[] szModiPath;
我是否必须将所有内容都更改为动态,或者在VS中是否有其他方式

为什么VS需要一个恒定的大小而mingw不需要

因为可变长度数组不是C++的一部分,尽管MinGW(g++)支持它们作为扩展。 数组大小必须是C++中的常量表达式。p> <>在C++中,建议使用<代码> STD::vector < /COD>代替C样式数组< /代码>:p> 我能想到的唯一办法就是

char* szModiPath = new char[len];
delete[] szModiPath;
这不是“唯一的办法”。使用STL容器

#include <string>

....
std::string s;
s.resize(len);
#包括
....
std::字符串s;
s、 调整大小(len);

#包括
....
std::向量缓冲区(len);

s,我不认为C++代码中使用匈牙利符号是个好主意。

使用yAlLoCA从堆栈中分配变量,然后编写封装类。它很凌乱,但你可以编写自己的基于堆栈的可变长度数组。

碰巧我的例子是使用字符字符串,我也使用整数和类数组:p加上我在做windows编程,所以我更喜欢使用空终止字符串,这样我就可以将它们传递给windows api函数/调用,我认为std::string的.c_str()成员是常量,所以我不能总是将其传递给windows函数。@kaije:如果要将缓冲区传递给windows函数进行写入,向量仍然会自动进行内存管理,并且
&vec[0]
会给您指向缓冲区的指针。如果你想避免动态分配,那么就使用windows定义的各种常量,比如
MAX\u PATH
。@kaijethegreat:没有理由让自己处于需要手动释放某些内容的位置。使用一个容器,它会一直为你做,好吧,好吧,所以明文一直在愚弄我,认为它实际上是有效的C++代码!但事实并非如此,如果能够做到这一点,那将是有益的。。。
#include <vector>

....

std::vector<char> buffer(len);