Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2011, 14:14   #1
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию Объясните функцию c_str

Здравствуйте, объясните пожалуйста доступным языком что делает функция c_str из класса string.
PotatoCaptain вне форума Ответить с цитированием
Старый 21.12.2011, 14:30   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от PotatoCaptain Посмотреть сообщение
Здравствуйте, объясните пожалуйста доступным языком что делает функция c_str из класса string.
Формирует массив строк в стиле си. И возвращает указатель на него.

Допустим, некоторая функция в качестве параметра принимает указатель на массив чаров:

void Foo(const char* content);

То есть, в неё можно передать строку только в виде c-ctyle указателя

А у тебя есть строка записанная в стринге:

std::string str="привет мир";

И тебе нужно передать эту строку в твою функцию:

Foo(str); //нельзя. функция не умеет работать со стрингами

но так как функция не умеет работать со стрингами, а только с указателями, то единственный способ сделать это - функция c_str()

Foo(str.c_str() ); //можно.

Функция c_str() присутствует только для совместимости с с-style кодом.
И в собственном c++ style коде, её лучше избегать настолько, насколько это возможно, дабы не плодить "суржик" (смесь двух стилей в одном исходном коде)
_Bers вне форума Ответить с цитированием
Старый 21.12.2011, 14:44   #3
PotatoCaptain
Пользователь
 
Регистрация: 05.12.2011
Сообщений: 40
По умолчанию

Спасибо, все стало понятно
PotatoCaptain вне форума Ответить с цитированием
Старый 01.08.2024, 05:42   #4
Алексей1153
фрилансер
Участник клуба
 
Регистрация: 11.10.2019
Сообщений: 1,010
По умолчанию

сорри за некропост. Сюда попал по ссылке из другой темы, не смог пройти мимо)

Цитата:
Сообщение от _Bers Посмотреть сообщение
Формирует массив строк в стиле си. И возвращает указатель на него.
написана ерунда.
Эта функция возвращает константный указатель на первый элемент внутреннего массива класса std:: string

Цитата:
Сообщение от _Bers Посмотреть сообщение
Функция c_str() присутствует только для совместимости с с-style кодом.
это, соответственно, тоже ерунда.
data() - возвращает указатель с константностью в зависимости от константности объекта
c_str() - всегда возвращает константный указатель
Алексей1153 вне форума Ответить с цитированием
Старый 01.08.2024, 07:50   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,759
По умолчанию

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
это, соответственно, тоже ерунда.
Нет, из первого вашего утверждения это не следует. Тем более это ваше утверждение ерунда.

Цитата:
Сообщение от Алексей1153 Посмотреть сообщение
c_str() - всегда возвращает константный указатель
И? Как это подтверждает ваш тезис? cbegin тоже всегда возвращает константный итереатор и итераторы это более С++ стиль.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему здесь выкидуется ошибка на счёт c_str и ToInt на счёт ostream elf01 C++ Builder 5 19.12.2011 23:07
почему здесь выкидуется ошибка на счёт c_str elf01 C++ Builder 1 16.12.2011 15:27
Описать функцию нахождения расстояния между 2-мя точками на плоскости, заданными своими координатами, и функцию .... zzz6 Помощь студентам 2 06.07.2011 08:24
Как передать указатель на функцию в функцию WIN32APIist Общие вопросы C/C++ 1 27.01.2011 10:35
Объясните!!! Tyfun Помощь студентам 3 08.09.2010 22:16