Проблема с преобразованием std :: string в char * - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь использовать устройство, подключенное к последовательной связи. API, предоставляемый для открытия порта связи, выглядит следующим образом:

int OpenComport(char * comport, int baudrate);

Итак, сначала я определяю компорт где-то в моем конфигурационном файле

//// my config file
#define COMPORT "/dev/ttyUSB0"

//// inmy settings file 
settings->serveraddr_spad = COMPORT;

Думая, что все настроил правильно, Я начинаю преобразовывать строку в константный символ, а затем в вектор (см. Ниже).

//// in my usage file
std::vector<char> portchar((settings->serveraddr_spad).c_str(), 
                           (settings->serveraddr_spad).c_str() +
                        (settings->serveraddr_spad).size() + 1);

if(OpenComport(  &portchar[0], settings->serverbaud_spad))
{
   // do my action
}

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

Вместо этого, когда я переключился на это использование объявления массива char outfront, оно работает (ниже)

char portchar[13] = "/dev/ttyUSB0";

if(OpenComport( portchar, settings->serverbaud_spad))
{
   // do my action
}

Мой вопрос заключается в том, как преобразовать std :: string в char * для использования?

С уважением

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Вы можете использовать std::string::data(). В отличие от c_str() он возвращает char * для неконстантных строк. Начиная с C ++ 11 гарантируется, что возвращаемый массив будет завершаться нулем.

if(OpenComport(settings->serveraddr_spad.data(), settings->serverbaud_spad))
{
   // do my action
}
0 голосов
/ 04 мая 2020

Вам почти никогда не нужно vector<char>, вместо этого просто используйте:

if(OpenComport( (char*) settings->serveraddr_spad.c_str(), settings->serverbaud_spad))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...