2015-04-14 191 views
0

對不起,另一個令人誤解的標題,發現很難描述它是什麼。我試圖讓用戶能夠在控制檯中鍵入一些內容,並將它添加到system()命令的末尾。例如:如何使用system()函數與用戶輸入C++

cout << "Input an ip in the form of xx(x).xx(x).xx(x).xx(x)" << endl; 
cin >> ipstring; 
system("ping"); 

然後在ping之後有ipstring,以便用戶可以輸入他們想要ping的內容。在Java中,我認爲它會是這樣的:

system("ping" + ipstring) 
+3

請注意這一點。如果'ipstring'是'; rm -rf /'? – indiv

+1

幾個月前,我意外地抹去了我的虛擬機磁盤,使用了大量使用'system'的遺留代碼。真的不這樣做。 – sbabbi

回答

1

system()需要一個char*作爲輸入。

假設ipstringstd::string,你可以這樣做:

system(("ping " + ipstring).c_str()); 

如果沒有,你可以使用的東西更像這個:

std::ostringstream oss; 
oss << "ping " << ipstring; 
system(oss.str().c_str()); 

話雖這麼說,你真的不應該使用system()爲此。正如其他人所說的那樣,它是一種注射攻擊媒介。如果可用,則應該使用本機API執行ping操作,例如Windows上的IcmpSendEcho()。或第三方庫。

+0

只要您[首先清理用戶輸入](http://stackoverflow.com/questions/4273074/sanitize-user-input-in-bash-for-security-purposes),您就可以使用'system'。 – indiv

+0

同意。另一方面,'system()'產生一個獨立的進程,這可能並不總是可取的。如果有可用於執行相同任務的API函數,則應該使用它。 –

0

在C++中它幾乎完全一樣的東西,假設ipstringstd::string

system(("ping"+ipstring).c_str()); 

如果ipstringconst char*,那麼你應該平轉換爲std::string第一:

system((std::string("ping")+ipstring).c_str()); 
0

你可以使用'sprintf',像這樣

char to_send[1000]; 
sprintf(to_send,"ping %s" , ipstring.c_str()); 
system(to_send) 

假設你的'ipstring'是一個std :: string。