为什么VS要求数组大小不变,而MinGW不需要?它有办法吗?

时间:2010-08-14 13:51:16

标签: c++ visual-studio mingw

我已将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中还有其他方式吗?

3 个答案:

答案 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从堆栈中分配可变金额,然后编写一个封装类。这是一个非常混乱,但你可以编写自己的可变长度的基于堆栈的数组。