2017-02-27 51 views
0

我正在创建调用我创建的以前的程序的程序。为了执行前面的程序,我使用了一个名为system的内置函数。它工作的很好,但是当我尝试用我的一个参数中的空格执行系统命令时遇到了问题。它认为这是另一个论据。请问我该如何使用包含空格的参数执行系统命令?如何使用包含空格的参数执行系统命令

执行命令ArgumentProgram.exe

参数1 User

参数2 File 1

参数3 Open

Program 1 
int main() 
{ 
    int status = system("ArgumentProgram.exe User1 File 1 Open"); 
    return 0; 
} 

Program 2(ArgumentProgram.exe) 

int main (int argc, char *argv[]) 
{ 
    if (argc != 3) 
    { 
     printf("This executable needs 3 parameters input"); 
     return 0; 
    } 

    printf("User name is :%s\n", argv[0]); 
    printf("File name is :%s\n", argv[1]); 
    printf("Command is :%s\n", argv[2]); 
    return 0; 
} 
+0

这不是C编程语言的问题,而是您的平台如何使用'system'执行命令。通常这是一个外壳。阅读文档。 – Olaf

回答

1

虽然根据不同的操作系统上,我的第一个猜测是:环绕参数通过像这样的引号:

int status = system("ArgumentProgram.exe User1 \"File 1\" Open"); 
0

它始终是一个有点冒险要在C system,因为这可能会或可能不会涉及之间的aditional的shell进程的调用。分开传递程序和参数更安全。

替代解决方案取决于您的运行时环境;请参阅here以用于Windows和世界其他地区的实施。

您可能会争辩说,通过这种方式,您将失去标准合规性,并且如果您想在便携式平台之间进行移植,则必须通过#ifdef提供一个用于Windows的版本和一个用于其他操作系统的版本。但是,即使使用system(....),只要程序符合ANSI C,您就只是“可移植”的;但是由于由系统执行的外壳以及命令字符串的解释取决于您的环境,所以您也不是真正便携式的。

相关问题