Подтвердить что ты не робот

Преобразовать char * в строку С++

Я знаю начальный адрес строки (например, char* buf) и максимальную длину int l; строки (то есть общее число символов меньше или равно l).

Каков самый простой способ получить значение string из указанного сегмента памяти? Другими словами, как реализовать string retrieveString(char* buf, int l);.

EDIT: память зарезервирована для записи и чтения строки переменной длины. Другими словами, int l; указывает размер памяти, а не длину строки.

4b9b3361

Ответ 1

std::string str(buf, buf + l);

Или, если строка уже существует:

str.assign(buf, buf + l);

Изменить: Я все еще не совсем уверен, что понимаю вопрос. Но если это что-то вроде того, что предлагает JoshG, что вы хотите до l символов или до нулевого терминатора, в зависимости от того, что наступит раньше, вы можете использовать это:

std::string str(buf, std::find(buf, buf + l, '\0'));

Ответ 2

char *charPtr = "test string";
cout << charPtr << endl;

string str = charPtr;
cout << str << endl;

Ответ 3

Используйте конструктор строк

basic_string(const charT* s,size_type n, const Allocator& a = Allocator());

EDIT:

ОК, то, если строка строки C не указана явно, используйте ctor:

basic_string(const charT* s, const Allocator& a = Allocator());

Ответ 4

Кажется, что осталось немного деталей из вашего объяснения, но я сделаю все возможное...

Если это строки с нулевым завершением или память предварительно обнулена, вы можете просто перебрать длину сегмента памяти, пока не нажмете символ NUL (0) или максимальную длину (в зависимости от того, что наступит раньше). Используйте конструктор строк, передав буфер и размер, определенный на предыдущем шаге.

string retrieveString( char* buf, int max ) {

    size_t len = 0;
    while( (len < max) && (buf[ len ] != '\0') ) {
        len++;
    }

    return string( buf, len );

}

Если это не так, я не уверен, как вы определяете, где заканчивается строка.