c++ - 如何将值附加到命令行参数数组?

标签 c++ arrays command-line-arguments argv

我的应用程序有入口点

int main(int argc, char *argv[])
{

}

我需要将 *argv 数组扩展到 n+1 并附加一个值。例如,我需要附加 "-app_ver"

我是 C++ 的新手(具有 Java 背景)。我知道我不能改变数组大小,所以我需要任何解决方案(任何复制数组的方法等)

最佳答案

要复制您的 argv,您可以使用指向 char 的指针的 std::vector

std::vector<const char*> new_argv(argv, argv + argc);

然后向其中添加新元素:

new_argv.push_back("-app_ver");
new_argv.push_back(nullptr); // or NULL if you are using an old compiler

然后用新数组替换argv:

argv = new_argv.data(); // or &new_argv[0] if you are using an old compiler
argc = argc + 1;

注意:在普通参数的末尾,应该有一个空指针。它很少被使用(尽管它是标准所要求的);如果您确定您的进一步代码不使用它,并且您只想将一个元素添加到您的 argv 数组,您可以只覆盖空指针,而不使用任何替换 argv。也就是说,忽略上面所有的代码,只需要这样做:

argv[argc++] = "-app_ver";

但是,这很危险 - 如果您决定再添加一个元素,它就会崩溃,如果某些代码要求在最后一个参数之后存在空指针,它可能会崩溃。

关于c++ - 如何将值附加到命令行参数数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43372267/

相关文章:

c++ - 为什么我的代码总是跳过 C++ 的 else 语句?

c++ - 有没有一种快速方法可以将所有 vector 值 'move' 移动 1 个位置?

javascript - 从 react js中的对象数组中删除一个元素

javascript - 如何在 Javascript 中获取数组中所有相同类型的对象?

Bash ls 和命令管道

c++ - 运算符重载 C++

javascript - 对除一项之外的一组名称进行排序

mysql - mysqldump 文件去哪里?

比较 C 字符串与字符串指针的相等性

c++ - 如何让用户输入两次以上?