在c++的CC编译器中使用argv[]
Using argv[] in CC compiler for c++
在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]));
相关文章:
- 为什么我的for循环不能正确获取argv
- 碱基对映射 - 将 argv[i] 移动到整数或字符作为输入
- 如何将 argv[1] 转换为 LPCVOID?
- C ++编译器如何获取argv字符串的长度
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 如何使用提升program_options在使用后消耗/删除 ARGV 中的选项
- 如何将argv字符串更改为大数字的长整数
- 方法 argv[] SWIG C++ / Python 中的错误,会发生什么?
- 使用字符** argv 时如何避免指针算法
- 将 char* argv[] 转换为 wstring
- 字符串到来自 argv 的整数
- 在VS2013中使用devenv (C++)传递命令行参数argv
- 常量字符 * vs 常量字符 ** 在 argv 上
- 视频捕获与" int main(int argc, char **argv) "
- 基于C 的基于动词的ARGV
- 通过在argv中传递多个文件来读取它们[1]
- C++ Argv[1] 终止程序,返回值 9009
- 为什么现代C 仍然保留旧的C样式原型,用于int argc,char ** argv
- 作为参数的'char *args[]'和'char **argv'之间的差异
- 将ARGV和ARGC传递给Main作为数组