C++ 如何在c+;的单独终端中打开程序+;密码?

C++ 如何在c+;的单独终端中打开程序+;密码?,c++,ubuntu,gnome-terminal,C++,Ubuntu,Gnome Terminal,我想以编程方式执行以下任务 在C++中,打开一个终端(系统(GNOME终端)); C++中的LI> 运行位于某个位置的程序(./myprogram) 这是我的密码 strcpy(args, "gnome-terminal"); strcpy(args, "-e 'sh ./spout"); strcat(args, "' "); system(args); 但它在运行时给出了以下错误 sh: 0: Illegal option - P>除了通过C++调用一个终端来执行一个程序,可能还有更优

我想以编程方式执行以下任务

  • 在C++中,打开一个终端(系统(GNOME终端)); C++中的LI> 运行位于某个位置的程序(./myprogram)
  • 这是我的密码

    strcpy(args, "gnome-terminal");
    strcpy(args, "-e 'sh ./spout");
    strcat(args, "' ");
    system(args);
    
    但它在运行时给出了以下错误

    sh: 0: Illegal option -
    

    <> P>除了通过C++调用一个终端来执行一个程序,可能还有更优雅的解决方案,你可以和其中的一个进行:

    std::string

    最明显的解决方案是使用
    std::string
    ,它为concat字符串提供重载运算符
    +

    #include <string>
    
    std::string args = "gnome-terminal ";
    args += "-e 'sh ./spout";
    args += "' ";
    
    strcat()

    如果你想使用C字符串,你可以使用类似的东西。请注意,我不建议这样做

    #include <cstring>
    
    strcpy(args, "gnome-terminal");
    strcat(args, "-e 'sh ./spout");
    strcat(args,  "' ");
    
    #包括
    strcpy(args,“gnome终端”);
    strcat(args,“-e'sh./喷口”);
    strcat(args,“”);
    

    请注意,第二个版本需要仔细查看
    args
    的分配内存。有关更多信息,请参阅。

    第二个strcpy将覆盖第一个strcpy。为什么不使用
    std::string?
    #include <cstring>
    
    strcpy(args, "gnome-terminal");
    strcat(args, "-e 'sh ./spout");
    strcat(args,  "' ");