Nod*_*bek 3 c++ arrays argv command-line-arguments
我的应用程序有入口点
int main(int argc, char *argv[])
{
}
Run Code Online (Sandbox Code Playgroud)
我需要扩展 *argv数组n+1并附加一个值。例如,我需要追加"-app_ver"。
我是C ++(具有Java背景)的新手。我知道我无法更改数组大小,因此我需要任何解决方案(复制数组等任何方法)
要复制您的内容argv,可以使用std::vector的指针char。
std::vector<const char*> new_argv(argv, argv + argc);
Run Code Online (Sandbox Code Playgroud)
然后向其中添加新元素:
new_argv.push_back("-app_ver");
new_argv.push_back(nullptr); // or NULL if you are using an old compiler
Run Code Online (Sandbox Code Playgroud)
然后替换argv为新数组:
argv = new_argv.data(); // or &new_argv[0] if you are using an old compiler
argc = argc + 1;
Run Code Online (Sandbox Code Playgroud)
注意:普通参数的末尾应该有一个空指针。它很少使用(尽管标准要求);如果您确定进一步的代码不使用它,并且只想向argv数组中添加一个元素,则可以覆盖null指针,而不用对它进行任何替换argv。也就是说,忽略以上所有代码,只需执行以下操作:
argv[argc++] = "-app_ver";
Run Code Online (Sandbox Code Playgroud)
但是,这很危险-如果您决定再添加一个元素,它将崩溃,并且如果某些代码要求在最后一个参数之后存在空指针,则可能会崩溃。
小智 2
就像 cbuchart 所说,你必须创建一个新的数组或者可能是一个向量。使用向量和字符串对象比 char* 和数组更简单。
示例:
#include <vector>
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
vector<string> list;
for ( int i = 1 ; i < argc ; i++){
string tmp (argv[i]);
list.push_back(tmp); // add all arguments to the vector
}
cout << "number of given arguments : " << list.size() << endl;
list.push_back("-app_ver"); // add one string to the vector
for ( int i = 0 ; i < list.size() ; i++){
cout << list[i] << endl; // acces data of the vector
}
}
Run Code Online (Sandbox Code Playgroud)