объединение строк в массив char в c ++ (с использованием less strcat) - PullRequest
0 голосов
/ 08 марта 2011

Например, у меня есть такой код.

    char NameTmp[] = "foo.txt";
    char Name[] = "bar.txt"
    char cmd[80] = "./analyzeText ";
    strcat(cmd, Name);
    strcat(cmd, " ");
    strcat(cmd, NameTmp);
    strcat(cmd, " ");
    strcat(cmd, "8");
    system(cmd);

По сути, я пытаюсь вызвать "./analyzeText bar.txt foo.txt 8" на linux в моей программе.analyText - это уже созданная программа, которая находится в той же папке.

Мне интересно, есть ли более короткий способ, чем использовать "strcat" для создания строк в c ++?

Ответы [ 3 ]

3 голосов
/ 08 марта 2011

Используйте несколько строк:

std::string NameTmp = "foo.txt";
std::string Name = "bar.txt";
std::string cmd = "./analyzeText " + Name + " " + NameTemp + " 8";
system(cmd.c_str());

Это немного менее эффективно (создается больше строк), но намного проще.

3 голосов
/ 08 марта 2011

Да, используйте конструкции C ++:

std::string nameTmp = "foo.txt";
std::string name    = "bar.txt";
int param = 8;

...

std::stringstream ss;
ss << "./analyzeText " << name << " " << nameTmp << " " << param;
system(ss.str().c_str());

Я предполагаю, что имена и параметры являются переменными во время выполнения.Очевидно, что если это не так, вы можете заменить, если это необходимо.

3 голосов
/ 08 марта 2011
std::string cmd("./analyzeText ");
cmd += Name;
// etc.
system(cmd.c_str());

Правильный аргумент += может быть строкой C (const char * / литерал), std::string или одним символом.

(Пожалуйста, никогда не используйте strcat в C ++; это не нужно и небезопасно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...