То, что я пытаюсь сделать здесь, это бросить stringbuf
объект в массив char.
Я делаю это, чтобы отправить массив символов в C
интерфейс, который не понимает тип std::stringbuf
,
Вот часть моего кода, чтобы проиллюстрировать проблему:
std::stringbuf buffer;
char * data;
//here i fill my buffer with an object
buffer >> Myobject;
//here is the function I want to create but I don't know if it's possible
data = convertToCharArray(buffer);
//here I send my buffer of char to my C interface
sendToCInterface(data);
Как Kiroxas предлагает в первый комментарий, старайтесь избегать промежуточных переменных:
sendToCInterface(buffer.str().c_str());
…чем меньше переменных, тем меньше путаницы 😉
Если у вас нет строгих требований к нулевой копии / высокой производительности, то:
std::string tmp = buffer.str();
// call C-interface, it is expected to not save the pointer
sendToCharInterface(tmp.data(), tmp.size());
// call C-interface giving it unique dynamically allocated copy, note strdup(...)
sendToCharInterface(strndup(tmp.data(), tmp.size()), tmp.size());
Если вам нужно, чтобы он был быстрым (но в пути все еще есть stringbuf), вы можете посмотреть в направлении stringbuf :: pubsetbuf ().
Если вы хотите преобразовать std :: stringbuf в указатель на символ, я думаю, вы могли бы просто сделать
std::string bufstring = buffer.str();
чтобы получить строку, и преобразовать ее в строку в стиле c, используя
bufstring.c_str()
передать символьный указатель на функцию