我已将Mingw中的一些代码移植到visual studio及其编译器中,我使用code :: blocks编写了代码,它已经发现了很多错误,我的数组大小必须是常量!为什么VS需要一个恒定的大小而mingw不需要?
e.g。
const int len = (strlen(szPath)-20);
char szModiPath[len];
len变量用红色下划线表示它是一个错误,并说“预期的常量表达式”
我能想到解决这个问题的唯一方法是....
char* szModiPath = new char[len];
delete[] szModiPath;
我是否必须将所有内容更改为动态或VS中还有其他方式吗?
答案 0 :(得分:6)
我能想到解决这个问题的唯一方法是....
这不是“唯一的方法”。使用STL容器。
#include <string>
....
std::string s;
s.resize(len);
或
#include <vector>
....
std::vector<char> buffer(len);
P.S。另外,我认为在C ++代码中使用匈牙利符号并不是一个好主意。
答案 1 :(得分:5)
为什么VS需要一个恒定的大小而mingw不需要?
因为可变长度数组不是C ++的一部分,尽管MinGW(g ++)支持它们作为扩展。 数组大小必须是C ++中的常量表达式。
在C ++中,始终建议使用std::vector
而不是C-style arrays
。 :)
答案 2 :(得分:0)
使用_alloca从堆栈中分配可变金额,然后编写一个封装类。这是一个非常混乱,但你可以编写自己的可变长度的基于堆栈的数组。