将命令行参数传递给函数

问题描述:

我在C中使用LIBSVM进行性别检测。在sum-train.c中有一个函数 parse_command_line(argc,argv,input_file_name,model_file_name);将命令行参数传递给函数

现在我想传递参数给这个函数,但不使用命令行,但在这个程序中。 e.g的参数可以是: -s -t 1 2 -C 1-G 0.5 -v 5 input_file_name model_file_name

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

如果它们是标准的main类型参数,这里是你需要的。

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根据提供的参数。

+0

但它们已经在parse_command_line()中定义了。看看这个函数[link] http://gt-ros-pkg.googlecode.com/svn/trunk/hrl/libsvm3/svm-train.c我不能重新定义它们。只是我想用这些参数调用这个函数,但不知道如何去做。我不是C的专家。任何帮助将不胜感激 – BlueBee 2012-08-17 04:07:24

+0

@ wishee77,对不起,也许我不太清楚。 argc/argv是本地的,你只需将它传递给该函数即可。我会重命名本地的,使其更清晰,并显示如何调用该函数。 – paxdiablo 2012-08-17 04:42:37

+0

非常感谢。我会等待你的回复。我试图以不同的方式调用函数,但它不起作用。如果你能帮我解决问题,那将会非常棒。并感谢您的快速回复:) – BlueBee 2012-08-17 04:54:35