1

我正在尝试使用最终调用的 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

要启动的程序和文件名路径都由获取的 env 变量形成,并且命令 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"

所以我该怎么做?

  1. 编辑环境变量以获得引号?(不要这么认为)
  2. 检查命令是否有文件作为参数,然后以某种方式将带有转义字符的引号添加到它们两者中并删除单词开始?
  3. 做一些我不知道的明智/优雅的事情
4

2 回答 2

2

我会尝试引用所有参数,例如:

int main(int argc, char *argv[])
{
  char command[1024];
  char *title = "test vlc";
  char *executable = "vlc.exe";
  char *param = "09 - Track09.mp3";

  snprintf(command, sizeof(command), "start \"%s\" \"%s\" \"%s\"",
           title, executable, param);
  printf("%s\n", command);
  system(command);

  return EXIT_SUCCESS;
}

显然用您确定的可执行文件和参数替换可执行文件和参数。

于 2010-08-18T14:07:36.013 回答
1

在 Windows 中,启动的程序路径和任何带有路径名的参数都需要用双引号括起来(“like this”),如果它们包含空格。

例如:

"C:\Program Files\VideoLAN\VLC\vlc.exe" "C:\Documents and Settings\me\My Documents\My Music\09 - Track09.mp3"

于 2010-08-18T14:05:39.853 回答