Я хочу выполнить следующие задачи программно.
Вот мой код
strcpy(args, "gnome-terminal");
strcpy(args, "-e 'sh ./spout");
strcat(args, "' ");
system(args);
Но это дает следующую ошибку во время выполнения.
sh: 0: Illegal option -
Помимо того факта, что могут быть более элегантные решения, чем вызов терминала через C ++ для выполнения программы, вы можете воспользоваться одним из них:
станд :: строка
Наиболее очевидным решением является использование std::string
который обеспечивает перегруженный оператор +
согласовать строки.
#include <string>
std::string args = "gnome-terminal ";
args += "-e 'sh ./spout";
args += "' ";
станд :: stringstream
std::stringstream
это еще один вариант:
#include <sstream>
#include <string>
std::stringstream ss;
ss << "gnome-terminal ";
ss << "-e 'sh ./spout";
ss << "' ";
std::string args = ss.str();
strcat ()
Если вы хотите использовать строки C, вы можете использовать что-то вроде этого. Обратите внимание, что я не рекомендую это.
#include <cstring>
strcpy(args, "gnome-terminal");
strcat(args, "-e 'sh ./spout");
strcat(args, "' ");
Обратите внимание, что вторая версия нуждается в более внимательном рассмотрении выделенной памяти для args
, Увидеть strcat () для дополнительной информации.
Других решений пока нет …