将命令行参数传递给函数

Posted

技术标签:

【中文标题】将命令行参数传递给函数【英文标题】:Passing command line arguments to a function 【发布时间】:2012-08-13 11:31:27 【问题描述】:

我正在使用 C 语言中的 LIBSVM 进行性别检测。在 sum-train.c 中有一个函数 parse_command_line(argc, argv, input_file_name, model_file_name);

现在我想将参数传递给这个函数,但不是使用命令行,而是在这个程序中。例如,论点可以是: -s 1 -t 2 -c 1 -g 0.5 -v 5 input_file_name model_file_name

但我不知道如何将这些参数传递给这个函数。 *注意:我这样做是因为我不想使用提供的二进制文件。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果它们是标准的main-type 参数,这就是您需要的。

argc 必须是参数的计数,包括“程序名称”(引用是因为此值设置为取决于实现)。

argv 应该是一个字符指针数组,指定:

“程序名称”。 每个参数。 NULL 终止符。

所以,对于命令行

-s 1 -t 2 -c 1 -g 0.5 -v 5 input_file_name.dat model_file_name.dat

你会:

const char *myArgV[] = 
    "progname",
    "-s", "1",
    "-t", "2",
    "-c", "1",
    "-g", "0.5",
    "-v", "5",
    "input_file_name.dat",
    "model_file_name.dat",
    NULL ;
int myArgC = sizeof (argv) / sizeof (argv[0]) - 1;

然后调用:

char inputfile[100]; // potential buffer overflow risk but, since it is
char modelfile[100]; //  sample code, not really relevant.
parse_command_line (myArgC, myArgV, inputfile, modelfile);

这将解析参数,填充您传入的两个文件名变量,并根据提供的参数设置内部svm_parameter

【讨论】:

但是它们已经在 parse_command_line() 中定义了。看看函数 [link]gt-ros-pkg.googlecode.com/svn/trunk/hrl/libsvm3/svm-train.c 我无法重新定义它们。只是我想用这些参数调用这个函数,但不知道该怎么做。我不是 C 方面的专家。任何帮助将不胜感激 @wishee77,对不起,也许我不太清楚。我拥有的 argc/argv 是本地的,您只需将其传递给该函数即可。我将重命名本地的以使其更清晰,并展示如何调用该函数。 非常感谢。我会等待你的回复。我试图以不同的方式调用该函数,但它不起作用。如果你能帮助我,你会非常好。并感谢您的快速回复:) @wishee77,我认为是另一个误解 :-) 我已经已经通过这些更改更新了我的答案。你应该重新阅读它。 非常感谢您的快速回复。我按照你说的方式做了,但它给出了错误:svm-train.c: In function 'int main(int, char**)': svm-train.c:71: warning: deprecated conversion from string constant to 'char* '你知道吗,为什么?

以上是关于将命令行参数传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将命令行参数传递给 c 程序

将可变数量的 bash 命令行参数传递给 MATLAB 函数

在 Eclipse(Pydev) 中将命令行参数传递给 Python 脚本

将文件x中指定的函数作为命令行参数传递给python中的文件y的最佳方法

如何将命令行参数传递给构建的 Mix Release

如何将命令行参数传递给 WinForms 应用程序?