2016-06-21 49 views
1

我有一個命令的字符串,例如: 開始C:\Users\...\test application.exe 帶有空格的路徑。
現在我想用system()功能來啓動它:用包含空格的路徑啓動程序

system(command.c_str()); 

但問題是,它沒有啓動,因爲路徑包含空格。 我需要做些什麼來解決這個問題?

+5

像所有帶窗口空格的命令一樣,你需要用'''''把它包裝起來。 – NathanOliver

+1

引用路徑。請記住,如果您通過字符串文字設置,請將其轉義。 – drescherjm

+0

如果我對此做出評論:啓動「C:\ Users ... \ test application.exe」,它也不起作用......我不知道這些東西是如何工作的:/ – Shedex

回答

5

我需要做些什麼來解決這個問題?

你需要知道的第一件事是,system()使用shell執行命令,外殼要你與""封閉程序路徑,如果路徑中包含空格。

使用當前的C++標準,解決最簡單的方法是使用raw string literal

std::string command = R"("C:\Users\test application.exe")"; 
system(command.c_str()); 

否則(對於較老的C++標準),你需要逃避所有的特殊字符

std::string command = "(\"C:\\Users\\test application.exe\")"; 
        //^^ ^     ^
+0

@Cody我認爲這個公式更好。 –

+0

@Cody嗯,這是一個難以割裂的堅果。在這種情況下,我看不到任何用例ITM。 –

+1

@Cody啊,但我已經提到過。 –