Это не дубликат чего-то типа «почему простой system(variable)
не работает».Использовать переменную как вход system() WITHOUT c_str() в C++
решение для этого одного было бы просто хранить строку переменной ConverTable по c_str(), а затем просто позвонить: system(variable.c_str())
Однако я ищу способ сделать это без c_str()
прямого вызова.
Так что я пытался что-то вроде
class systemRunner{
private:
stringstream prepareStream;
public:
void setProgram(string s){
prepareStream.str(""); // empty stream
prepareStream.clear(); // reset stream - !IMPORTANT!
prepareStream << "\"" << s << "\"";
}
void appendParam(string s){ this->prepareStream << " " << s; }
void appendParam(int i){ this->prepareStream- << " " << i; }
const char* getSystemRunCString(){
//const std::string s = ;
return this->prepareStream.str().c_str();
}
};
можно было бы потом думать, что это будет enaugh:
system (systemRunner->getSystemRunCString())
Но это не удается, соотв. компилируется отлично, но когда система() вызывается так: система говорит, что не может найти указанный путь.
Однако, когда я его восстанавливаю и использую c_str()
в прямом системном вызове, например. например:
string tmp = (string)systemRunner->getSystemRunCString();
system(tmp.c_str());
Это прекрасно работает.
Можно было бы ожидать, что если создать метод, который возвращает то же самое, как c_str()
,
, который const char*
, что я хотел бы получить тот же результат, но я не получаю его ...
Я даже пытался поместить оба входа не в system()
, а в файл - те же результаты, поэтому он хранит ту же информацию ...
Я что-то упустил? Возможно ли это?
PS: Я говорю об использовании system()
в ОС Windows 7 приложения консоли ...
EDIT: Ну @ravi прямо о том, что вызывает этот пример на провал - но как насчет ответ на главный вопрос - в заголовке - можно ли вызвать систему (переменную) без прямого вызова c_str()? :)
Вы использовали временный объект после его уничтожения. Это обычный дубликат ... – Deduplicator
Возможный дубликат [Можно ли использовать (str1 + str2) .c \ _str()?] (Http://stackoverflow.com/questions/18146267/is-it-safe- to-use-str1-str2-c-str) – Deduplicator
Почему ваш 'systemRunner' не« запускает »' систему' с его именем? Просто сохраните строку в качестве переменной-члена и вызовите функцию-член 'system'. – rubenvb