2013-07-30 67 views
1

我真的不知道該如何解釋這一點,但這裏是我的問題:需要幫助的簡單的C命令行參數

我試圖讓我的程序接受命令行參數,然後通過運行一個程序。 Linux命令行(CentOS 6)。

繼承人的主要功能:

int main(int argc, char *argv[]) 

我想運行一個Linux程序,下面的代碼: '1.1.1。*'

system("nmap -sT -p 19 1.1.1.* -oG - | grep 19/open > temp"); 

我想,以取代第一論點我輸入我的C程序,例如:

system("nmap -sT -p 19 ", (argv[1]) "-oG - | grep 19/open > temp"); 

我已經嘗試了多種方法,並似乎沒有工作。總結一下,我試圖把第一個參數輸入到我的程序中,並用它來代替系統函數中的'1.1.1。*'。我不知道如何做到這一點,我是C編程新手。謝謝大家的回覆,非常感謝。

+0

請看[sprintf](http://www.manpagez.com/man/3/sprintf/)。使用'sprintf'將'argv [1]'和你想要運行的命令結合起來,然後將輸出存儲到一個變量中,然後像下面這樣將這個變量傳遞給系統:'char * a = sprintf(「stuff%s」,的argv [1]);系統(a);' –

+0

'sprintf'和'strcat'都要求緩衝區溢出(尤其是在接受用戶輸入的構造字符串的一部分時),除非您仔細追蹤結果的長度。而且由於你*會跟蹤你可以(而且應該!)使用'snprintf'來代替。 – dmckee

+0

@dmckee你是對的,'snprintf'是一個更好的選擇。 –

回答

1

snprintf是做到這一點的最安全的方式,這是沒有的argc等任何檢查一個簡單的例子...:

#include <string.h> 
#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    char buf[200] ; 
    char str1[] = "nmap -sT -p 19 "; 
    char str2[] = " -oG - | grep 19/open > temp"; 

    snprintf(buf, 200, "%s%s%s", str1, argv[1], str2); 
    printf("%s\n", buf) ;; 
} 
0

只需使用以下語法接受Linux的命令行參數。 ./program arg1 arg2