【发布时间】:2014-01-19 15:04:10
【问题描述】:
我想在main() 中初始化/设置char *argv[],以便稍后在我的程序中使用argv[1], argv[2]...。
到目前为止,我知道如何通过两种方式做到这一点:
-
对于
int main(),使用一行:int main() { char *argv[] = {"programName", "para1", "para2", "para3", NULL}; }注意,最后使用
NULL是因为argv数组中的指针指向C字符串,根据定义NULL终止。 -
对于
int main(int argc, char* argv[]),我必须使用多行作为:int main(int argc,char* argv[]) { argv[0] = "programName"; argv[1] = "para1"; argv[2] = "para2"; argv[3] = "para3"; }
我的问题是如何将这两种方法结合在一起,即只使用一行来为int main(int argc, char* argv[]) 初始化它?特别是,我希望能够这样做(目前这是错误的):
int main(int argc, char* argv[])
{
argv = {"programName", "para1", "para2", "para3", NULL};
}
我怎样才能做到这一点?
编辑:我知道argv[]可以设置在Debugging Command Arguments中。我想在main() 中编辑它们的原因是我不想每次都为新的测试用例使用Debugging Command Arguments(不同的argv[] 设置)。
【问题讨论】:
-
奇怪的想法。您的案例 2 很有可能使程序崩溃。 argc 和 argv 应该是只读的。
-
也许你应该描述一下你更大的目标是什么。我怀疑可能有一种不同的方法对你有用(虽然我不确定我是否真的理解这个问题,所以我可能错了)。
-
这很明显是X-Y problem。变量
argc和argv(或任何你命名的变量)是main()的本地变量,你可以用它们做任何你想做的事情。实际的命令行参数在标准 C++ 中是只读的,如果可以以不同的方式访问它们,那就是通过 OS API。您想通过修改参数来解决什么问题? -
如果您使用 C++,请不要直接使用 argc/argv:使用
std::vector<std::string>。您可以轻松地从 argc 和 argv 初始化这样的向量(通过std::vector<std::string> const args(argv, argv + argc);),或者如果您想在运行时使用一组已知字符串,您可以使用您选择的任何字符串自己初始化它。如果您正在学习 C++,我会推荐这种方法。它更安全,更难搞砸,并且需要更少的星号。 -
@herohuyongtao 这是个坏主意。为什么不编写一个能正确执行程序的脚本,而不是每次想要测试时都修改测试代码?