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

Using argv[] in CC compiler for c++

本文关键字:argv c++ CC 编译器      更新时间:2023-10-16

在g++编译器中,我的程序运行得很好,但在CC编译器中,出现了一个错误。

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

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

我需要argv[1],因为它从命令行获取要制作的形状数量。例如./program 10它应该使Team s[10];

如何使argv[]与CC编译器一起工作?

团队[10];

将在堆栈上创建数组,但只有当size是常量表达式时,这才有可能。如果你想要动态数组,那么你必须通过调用new[] 来动态创建数组

int size = atoi( argv[1]);
Team* s = new Team[ size];

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

对于数组,指定的大小必须是常量。所以,虽然你可以做到这一点:

Team s[10];

你不能这样做:

int size = 10;
Team s[size];

相反,你必须这样做:

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

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

要做到这一点,您需要动态分配数组:

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