2012-08-17 115 views
1

我在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

但我不知道如何將這些參數傳遞給這個函數。 *注:我正在做這一切,因爲我不想使用提供的二進制文件。任何幫助將不勝感激。

回答

1

如果它們是標準的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