2013-07-24 9 views
0

У меня возникли проблемы с получением system() для запуска команды в строковой переменной.Ошибки при вводе строковой переменной в систему()

ostringstream convert; 
convert << getSeconds(hours); 
string seconds = convert.str(); /* converts the output of 'getSeconds()' into 
             a string and puts it into 'seconds' */ 

string cmd = "shutdown /s /t " + seconds; 

system(cmd); 

getSeconds() просто принимает Int в часах, преобразует его в секундах и возвращает Int в секундах. Все работает нормально, никаких ошибок, пока не достигнет system(cmd);. Затем компилятор выплевывает эту ошибку:

error: cannot convert 'std::string {aka std::basic_string<char>}' to 
'const char*' for argument '1' to 'int system(const char*)' 

Вот мои включает в себя:

#include <iostream> 
#include <string> 
#include <cstdlib> 
#include <sstream> 
+2

'system (cmd.c_str());' – Borgleader

+0

Почему бы вам не ответить на него, когда это ответ? –

ответ

2

система принимает строку C не в зЬй :: строку, так что вы должны вызвать функцию c_str первым.

system(cmd.c_str()); 
4

Я знаю, что это уже есть ответ на замечания, но на самом деле не объяснил:

system функция является функцией C. Он не «понимает» строки стиля C++. Для этого вам нужно будет использовать функцию c_str(). Другими словами, вам нужно system(cmd.c_str());.

Это относится к большому числу функций стиля C, которые все еще доступны на C++, поскольку одна из основных возможностей C++ заключается в том, что вы по-прежнему можете использовать традиционный C-код (по большей части) на C++. Таким образом, то же самое относится к почти любой функции стиля C, которая принимает строку - printf("cmd=%s", cmd.c_str()); будет печатать то, что ваша команда.

Было бы possibe написать свою собственную функцию обертки:

int system(const std::string &cmd) 
{ 
    return system(cmd.c_str()); 
} 

Теперь, остальная часть коды можно использовать system с обычной строкой в ​​стиле C++.

Смежные вопросы