2013-07-25 4 views
1

Что такое хороший способ конвертировать unterminated char * в строку std :: string? Например, после завершения следующего,C++ конкатенация unterminated char * to std :: string

int bytes = recv(_socket, &_recv_buffer, recv_buffer_len, 0) 

У меня есть адрес приемного буфера, и число байт, содержит, и я хочу, чтобы объединить его с стандом :: строкой. (FWIW, я не работаю с многобайтными наборами символов.) Запасной вариант должен был бы сделать _recv_buffer один байт больше, чем recv_buffer_len и установите _recv_buffer [байт] = «\ 0», но я подумал, был менее неряшливый путь.

ответ

4

std::string имеет append метод, который принимает и указатель на строку, длина:

string& append (const char* s, size_t n); 

Для вас:

myString.append(_recv_buffer, bytes); 

редакции: смотреть из идентификаторов, которые начинаются с _. Они зарезервированы для использования при реализации.

+0

Даже одно подчеркивание? Я почему-то думал, что это обычно используется для переменных экземпляра. Что-то еще вместо этого? – Chap

+0

Я лично использую одиночное подчеркивание подчеркивания 'like_this_'. – Chad

+1

Из спецификации: «Каждое имя, начинающееся с подчеркивания, зарезервировано для реализации для использования в качестве имени в глобальном пространстве имен». –

1

Используйте str.append(recv_buffer, bytes);, который должен сделать трюк.

1
std::string data(&_recv_buffer, &_recv_buffer + bytes); 

И вы уверены насчет &_recv_buffer? Если ваш буфер char[] или что-то похожее, оно должно быть _recv_buffer.

+0

Да, я думаю, ты прав. – Chap