在c ++的CC编译器中使用argv []

时间:2014-09-26 11:56:41

标签: c++ cc

在g ++编译器中,我的程序运行正常,但是在CC编译器中,我收到错误。

以下行:Shape s[atoi(argv[1])];给出错误: error:数组下标运算符中需要一个整型常量表达式。

然后,我尝试将其更改为:int i = atoi(argv[1]);后跟Shape s[i];,但我仍然遇到同样的错误。

我需要argv [1]因为它从命令行获取了多少个形状。 例如./program 10 它应该Team s[10];

如何让argv []与CC编译器一起使用?

3 个答案:

答案 0 :(得分:2)

团队[10];

会在堆栈上创建数组,但只有当size是常量表达式时才有可能。如果您需要动态数组,则必须通过调用new[]

动态创建数组
int size = atoi( argv[1]);
Team* s = new Team[ size];

首选std::vector<Team> tv(size);,这将简化内存管理(毕竟,迟早,你必须学习STL库,从今天开始)。

答案 1 :(得分:1)

对于数组,指定的大小必须是常量。所以你可以这样做:

Team s[10];

你不能这样做:

int size = 10;
Team s[size];

相反,你必须这样做:

int size = 10;
Team* s = new Team[size];
// do stuff
delete[] s;

答案 2 :(得分:1)

在标准C ++中,数组的大小必须是编译时常量。 GCC允许可变长度数组作为非标准扩展;其他编译器没有。

为了便携地执行此操作,您需要动态分配的数组:

#include <memory>

std::vector<Shape> s(atoi(argv[1]));