2012-06-08 73 views
2

我有3个不同的命令行命令的字符串数组。我试图学习如何将包含这些命令的字符串数组传递给for循环中的系统函数(或类似的函数,即exec()),而不是写出3个系统函数。我在试图弄清楚如何将这个字符串数组一次一个地传递给系统函数时遇到了困难。目标是要退出每个状态并在返回错误时中断for循环。将字符串数组传递给系统函数?

  std::string arrString[3] = {"something","another thing","a final thing"} 
      int i; 
      for(i=0; i<3; i++) 
      { 
       if (system(/*Something*/)) 
       ;//Do something... 
      }  

编辑:它输出一个错误发生,但它不应该。

   std::string arrString[4] = {"cmd","cmd","cmd"}; 
      int i; 
      for(i=0; i<3; i++) 
      { 
       if (system(arrString[i].c_str())==0) { 
        OutputDebugStringW(L"It works!"); 
       } 
       else 
       { 
        OutputDebugStringW(L"It doesnt work :("); 
       } 
      } 

回答

3

system需要char*,所以你需要调用c_str您的阵列中的每个元素:

std::string arrString[3] = {"something","another thing","a final thing"} 
int i; 
for(i=0; i<3; i++) { 
    if (system(arrString[i].c_str())) { 
     //Do something... 
    } 
} 
+0

工作我如何需要。谢谢。在附注中,检查退出状态是否成功的最佳方法是什么?请参阅上面的编辑* – arynhard

+0

'system(...)'返回命令返回的任何内容。通常,命令在成功时返回零,但确切的值取决于系统。您可以将返回码分配给一个“int”变量,并检查该值以确定运行是否成功。 – dasblinkenlight

+0

因此,使用'if(system(arrString [i] .c_str()== 0)'这样的东西不是最好的选择吗?我听说system()的返回并不总是可靠的。我只是想找到最好的解决方案。 – arynhard

0
system(arrString[i]) 

然后检查退出代码,如果合适的破环。

0

你必须使用c_str()功能std:string转换为char*第一:

system(arrString[i].c_str())