2016-06-16 2 views
-1

Дано: auto text = "-1|FUNCTION"sC++ увеличить раздвоение полукокса

Я должен разделить его на идентификатор: "-1" и функцию: "FUNCTION".

Мой код:

std::vector<std::string> res; 
boost::split(res, text, boost::is_any_of("|")); 
log("ID: %d Function: %s", res[0], res[1]); 

Мой результат:

ID: 12589 НАЗНАЧЕНИЕ: ... Эт "·

+0

Ваш код штраф: Смотрите [здесь] (HTTP: // melpon. орг/wandbox/permlink/Z6JbApkcTuDNTHvJ). Возможно, ваш текст не имеет нулевого завершения. Поскольку вы не показываете, как вы его получите. – mkaes

+0

Рассмотрите https://stackoverflow.com/help/mcve – renemilk

ответ

1

Одна проблема в вашем коде, что вы регистрируетесь первый %d а затем %s, но в вашем списке аргументов у вас есть res[0] и res[1], оба типа std::string, оба не в соответствии со списком форматов, поэтому, может быть, ваша проблема с ведением журнала, изменить его на:

log("ID: %s Function: %s", res[0].c_str(), res[1].c_str()); 
0

Скорее всего, ваша проблема не из функции разделения.

Функция журнала ожидает адрес строки в стиле C, и вы даете ему строковый объект. Это неопределенное поведение.

Попробуйте войти это следующим образом:

log("ID: %s Function: %s", res[0].c_str(), res[1].c_str()); 
0

Ваша проблема, как другие сказали, что вы передаете string где log ожидает const char*. Думала отправить ответ, чтобы выразить, что ваше решение было бы гораздо проще, если вы просто использовать стандарт:

auto pos = text.find('|'); 

log("ID: %s Function: %s", data(text.substr(0U, pos)), data(text.substr(pos + 1, size(text) - pos - 1)); 

Live Example

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