数组长度,为什么从命令行获取时不能使用它?

Array Length, why can't it be used when taking from command lines?

本文关键字:不能 获取 命令行 为什么 数组      更新时间:2023-10-16

我正试图让我的一个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;
}

当你使用newnew[]创建一些东西(比如数组(时,你必须分别使用deletedelete[]手动处理它们(包括归还内存(。然而,这可能会被遗忘,因此它是内存泄漏的潜在来源。因此,通常会使用自动管理动态数组的类型,就像std::vector一样。

因为它不是常量,不能使用。

就像int的大小被烘焙到程序中一样,数组的大小也是如此。它有3个元素,或者9个元素,或512个元素…但这些信息不能来自命令行,因为在编译程序时,它已经被烘焙到程序中了

相反,使用像std::vector这样的"动态数组",它可以在运行时根据需要进行增长和收缩。