Ну, здесь есть проблема. strtok()
принимает строку с нулевым символом в конце, а содержимое std::string
не обязательно должно заканчиваться нулем.
Вы можете получить строку с нулевым символом в конце std::string
, вызвав для нее c_str()
, но это вернет const char*
(т.е. строка не может быть изменена). strtok()
принимает char*
и изменяет строку при ее вызове.
Если вы действительно хотите использовать strtok()
, то, на мой взгляд, самым чистым вариантом будет скопировать символы из std::string
в std::vector
и завершить нулем вектор:
std::string s("hello, world");
std::vector<char> v(s.begin(), s.end());
v.push_back('\0');
Теперь вы можете использовать содержимое вектора в виде строки с нулевым символом в конце (используя &v[0]
) и передать ее в strtok()
.
Если вы можете использовать Boost, я бы рекомендовал использовать Boost Tokenizer . Он обеспечивает очень чистый интерфейс для токенизации строки.