数组长度,为什么从命令行获取时不能使用它?
Array Length, why can't it be used when taking from command lines?
我正试图让我的一个argv(作为字符串发送的int
(成为数组的长度,但编译器一直告诉我num_of_players不是常数,不能使用
有什么建议吗?
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int num_of_players = stoi(argv[argc - 1]);
int player_list[num_of_players];
return 0;
}
问题是,以这种方式声明数组需要在编译时提供大小。不能使用在运行时发现的值来声明它们。
最基本的选择是使用动态数组,您可以手动创建:
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int num_of_players = stoi(argv[argc - 1]);
int* player_list = new int[num_of_players];
// do stuff with player_list here...
delete[] player_list; // REMEMBER to delete[] it!!
return 0;
}
当你使用new
或new[]
创建一些东西(比如数组(时,你必须分别使用delete
或delete[]
手动处理它们(包括归还内存(。然而,这可能会被遗忘,因此它是内存泄漏的潜在来源。因此,通常会使用自动管理动态数组的类型,就像std::vector
一样。
因为它不是常量,不能使用。
就像int
的大小被烘焙到程序中一样,数组的大小也是如此。它有3个元素,或者9个元素,或512个元素…但这些信息不能来自命令行,因为在编译程序时,它已经被烘焙到程序中了
相反,使用像std::vector
这样的"动态数组",它可以在运行时根据需要进行增长和收缩。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 数组长度,为什么从命令行获取时不能使用它?
- Visual Studio 2017 C++,不能使用 typeid() 获取信息对象,缺少指针?;
- 为什么我不能检索变体的索引并使用它来获取其内容?
- 不能从派生类中获取基类的成员. C++
- 为什么我不能将从我的 BST 获取的这个节点推送到这个堆栈中?
- 为什么此获取和释放内存围栏不能给出一致的值?
- 我的二传手可以获取参数,但实际上不能?
- 为什么它不能在 c++ 中获取迭代器作为引用
- 为什么基类型指针不能获取派生类对象的地址值?
- c++声明向量数组以获取类,但不能访问成员变量
- Getline不能在cin.clear后获取某些字符
- Qt不能从lineedit中获取文本
- 不能将NULL发送给获取向量的函数
- 在JNI中不能使用GetIntField在java类Android中获取值
- 为什么我不能用DirectInput获取键盘?
- 使用 rand() 获取一个数字,但该数字不能是上次生成的数字