2016-06-21 53 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啊,但我已经提到过。 –