【发布时间】:2011-03-31 13:59:18
【问题描述】:
我正在尝试使用最终调用的 VS2005 修复现有的 C 程序
int system(command) //in C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\system.c)
带参数值
开始 C:\Program Files\VideoLAN\VLC\vlc.exe C:\Documents and Settings\me\My Documents\My Music\09 - Track09.mp3要启动的程序和文件名路径都由获取的环境变量组成,命令 start 附加到 char 缓冲区的开头。环境变量是:
%VLCPATH%,其值为C:\Program Files\VideoLAN\VLC%MUSIC%,其值为C:\Documents and Settings\me\My Documents\My Music
我一直在用 XP 命令提示符尝试这个,当路径没有空格时一切正常。这也有效:
"%VLCPATH%\vlc.exe" "%MUSIC%\09 - Track09.mp3"
那我该怎么办?
- 编辑环境变量以包含引号? (不要这么认为)
- 检查命令是否有文件作为参数,然后以某种方式为它们添加带有转义字符的引号并删除单词 start?
- 做一些我不知道的明智/优雅的事情
【问题讨论】:
-
你能用
execv()代替system()吗? Windows 上的棘手部分是fork()等效项。但是避免使用“shell”(cmd.exe)可能是最好的方法。 -
作为一般规则,您应该始终引用命令。引用可执行文件本身和任何作为路径的参数。
-
@jonathan:很抱歉,我没有完全理解。我必须找出这个 execv ... @Luke:所以我应该删除开头并使用一些转义字符操作“字符串”,以便它包含引号?
-
查看CreateProcess。您可能仍需要引号。
-
感谢两位的快速回复!
标签: c command-line command-line-arguments command-prompt