Vaclav_ Ответов: 2

Ищу хак для перенаправления вывода команды на переменное имя файла.


Это не проблема , а просто любопытный вопрос.
Прилагаемый код C++ создает "temp_file.txt - файл.

Мне любопытно, есть ли хак, чтобы использовать переменную вместо "литерала (?)" для имени файла.
Мое предположение состояло бы в том, чтобы изменить команду перенаправления "hciconfig", но я не настолько разбираюсь в этом.

system("hciconfig -a > temp_file.txt ");


Что я уже пробовал:

Замена имени файла переменной ( char *) в качестве имени файла не дала ожидаемых результатов.

2 Ответов

Рейтинг:
7

Richard MacCutchan

Это просто базовая манипуляция строками языка Си ...

char* command = "hciconfig -a > ";
char* tempfile = "temp_file.txt";
char szFullCommand[64];
strcpy(szFullCommand, command);
strcat(szFullCommand, tempfile);
system(szFullCommand);


Vaclav_

Оба решения хороши, но.....
это терминология, которая вызывает недоумение
"char *" - это строка в языке Си
и
"string" x-это строка в языке C++
Спасибо

Richard MacCutchan

C++ улучшил вещи, создав базовые классы, чтобы сделать его более объектно-ориентированным. Но он по-прежнему поддерживает типы C. Если вы пишете код C++, то вам действительно следует использовать только классы C++ для любых составных объектов (например, string).

Строго говоря, char* - это указатель на массив типов char, а не строка, поскольку C не имеет никакого понятия составных типов.

Рейтинг:
13

CPallini

Аргумент system это строка, вы можете сгенерировать такую строку в соответствии с вашими потребностями.
Например, следующая программа

#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

int main()
{
  vector <const char *> names { "foo.txt", "boo.txt", "gooooo.txt" };

  for (const auto & name : names )
  {
    ostringstream oss;
    oss <<   "hciconfig -a > " << name;
    cout << oss.str() << endl; // here you are the customized command string
  }
}
производит
hciconfig -a > foo.txt
hciconfig -a > boo.txt
hciconfig -a > gooooo.txt