Конвертировать char * в строку C ++ - PullRequest
27 голосов
/ 09 декабря 2011

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

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

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

Ответы [ 5 ]

19 голосов
/ 09 декабря 2011
std::string str(buffer, buffer + length);

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

str.assign(buffer, buffer + length);

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

std::string str(buffer, std::find(buffer, buffer + length, '\0'));
8 голосов
/ 09 декабря 2011
char *charPtr = "test string";
cout << charPtr << endl;

string str = charPtr;
cout << str << endl;
2 голосов
/ 09 декабря 2011

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

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

string retrieveString( char* buf, int max ) {

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

    return string( buf, len );

}

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

2 голосов
/ 09 декабря 2011

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

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

РЕДАКТИРОВАТЬ:

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

basic_string(const charT* s, const Allocator& a = Allocator());
0 голосов
/ 15 февраля 2018
std::string str;
char* const s = "test";

str.assign(s);

string& assign (const char* s); => signature FYR

Ссылка / с здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...