cpp-как получить только значение c_str ()

У меня есть функция, которая возвращает const char*,
В этой функции у меня есть следующие параметры:

string str;

Для преобразования ул в const char* я использую str.c_str(),

Когда я отлаживаю, я замечаю, что str.c_str() содержит что-то (я думаю, его адрес) перед значением строки.
Например:
Если str = «0», то я str.c_str() 0x68d5f9 «0».
Почему это?
Как я могу получить только значение строки?

-2

Решение

это не является проблема в том, как работают указатели.

Указатели указывают на данные, содержащиеся в какой-то адрес памяти и отладчик показывает вам, что этот указатель указывает на адрес 0x<something> и значение по этому адресу '0', Здесь нет ничего странного.

Когда вы печатаете это значение, которое вы получили от str.c_str(), вы получите обычную C-строку.

cout << str.c_str();

Это даст вам так же, как cout << str;

1

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

Вы не получите адрес, на который указывает указатель в строке, возвращаемой c_str, Это артефакт отладчика, предназначенный для того, чтобы программисты могли проверить адрес вместе со значением.

Тем не менее, возвращая результат c_str может быть неопределенным поведением, если вызов сделан для строки в функциональной области.

Например, это незаконно:

const char *illegal_return() {
string s = "quick brown fox";
return s.c_str(); // <<== Return of c_str from a local string
}

Лучшее решение — вернуть string, Если вы хотите вернуть char вместо указателя, вам нужно сделать копию:

char *legal_return() {
string s = "quick brown fox";
const char *ptr = s.c_str();
size_t len = strlen(ptr);
char *res = new char[len+1];
strcpy(res, ptr);
return res;
}

Вызывающая сторона вышеупомянутой функции должна вызвать delete[] на результат, чтобы избежать утечек памяти.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector