Как преобразовать std :: stringbuf в массив char?

То, что я пытаюсь сделать здесь, это бросить 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);

0

Решение

Как Kiroxas предлагает в первый комментарий, старайтесь избегать промежуточных переменных:

sendToCInterface(buffer.str().c_str());

…чем меньше переменных, тем меньше путаницы 😉

1

Другие решения

Если у вас нет строгих требований к нулевой копии / высокой производительности, то:

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 ().

2

Если вы хотите преобразовать std :: stringbuf в указатель на символ, я думаю, вы могли бы просто сделать

std::string bufstring = buffer.str();

чтобы получить строку, и преобразовать ее в строку в стиле c, используя

bufstring.c_str()

передать символьный указатель на функцию

1