Другие языки программирования и технологии
C++ Что делает c_str()? Объясните начинающему программисту понятно и просто, пожалуйста.
programmersforum.ru/showthread.php?t=180282
В С++ два типа строк: string (или wstring) и динамический массив символов char (или wchar_t).
Но функции из стандартной библиотеки работают или с олдним. или с другим, и не перегружены (не продублированы) для другого.
Поэтому если вам надо применить поочередно несколько библиотечный функций, то и приходится преобразовывать один тип строк в другой и обратно.
В том числе с помощью этой функции.
Но функции из стандартной библиотеки работают или с олдним. или с другим, и не перегружены (не продублированы) для другого.
Поэтому если вам надо применить поочередно несколько библиотечный функций, то и приходится преобразовывать один тип строк в другой и обратно.
В том числе с помощью этой функции.
Преобразовывает строку string (или wstring) в указатель на динамический массив символов char (или wchar_t).
Нужно в тех случаях, когда надо передать содержимое string в функцию, которая принимает не string, а только такой массив, скорее всего это сишная функция типа MessageBox из Windows.h
Как-то так (пишу по памяти, не проверял):
wstring s;
s = L"Hello World";
MessageBox(0, s, 0, 0); // нельзя
MessageBox(0, s.c_str(), 0, 0); // можно
Нужно в тех случаях, когда надо передать содержимое string в функцию, которая принимает не string, а только такой массив, скорее всего это сишная функция типа MessageBox из Windows.h
Как-то так (пишу по памяти, не проверял):
wstring s;
s = L"Hello World";
MessageBox(0, s, 0, 0); // нельзя
MessageBox(0, s.c_str(), 0, 0); // можно
Конвертирует С++ строку в С строку. Это разные языки, и строки у них разные, но конвертируемые друг в друга.
Формирует массив строк в стиле си. И возвращает указатель на него.
Допустим, некоторая функция в качестве параметра принимает указатель на массив чаров:
void Foo(const char* content);
То есть, в неё можно передать строку только в виде c-ctyle указателя
А у тебя есть строка записанная в стринге:
std::string str="привет мир";
И тебе нужно передать эту строку в твою функцию:
Foo(str); //нельзя. функция не умеет работать со стрингами
но так как функция не умеет работать со стрингами, а только с указателями, то единственный способ сделать это - функция c_str()
Foo(str.c_str() ); //можно.
Функция c_str() присутствует только для совместимости с с-style кодом.
И в собственном c++ style коде, её лучше избегать настолько, насколько это возможно, дабы не плодить "суржик" (смесь двух стилей в одном исходном коде)
Допустим, некоторая функция в качестве параметра принимает указатель на массив чаров:
void Foo(const char* content);
То есть, в неё можно передать строку только в виде c-ctyle указателя
А у тебя есть строка записанная в стринге:
std::string str="привет мир";
И тебе нужно передать эту строку в твою функцию:
Foo(str); //нельзя. функция не умеет работать со стрингами
но так как функция не умеет работать со стрингами, а только с указателями, то единственный способ сделать это - функция c_str()
Foo(str.c_str() ); //можно.
Функция c_str() присутствует только для совместимости с с-style кодом.
И в собственном c++ style коде, её лучше избегать настолько, насколько это возможно, дабы не плодить "суржик" (смесь двух стилей в одном исходном коде)
Sibastian Tj
Извини, а как тогда лучше перевести std::string в const std::char* ?
Похожие вопросы
- объясните начинающему программисту
- Вопрос программистам со стажем. Какой язык программирования учить начинающему программисту?
- Я начинающий программист, у меня нет никаких программ специальных типа Borland для использования их при написании прогр
- Паскаль, не трудная задачка, помогите начинающему программисту!
- начинающий программист Подскажите пожалуйста с чего начать начальному программисту?
- Выбор языка программирования, для начинающего программиста.
- Для чего служит код C++? Или какие коды должен знать уверенный программист.
- Что нужно знать начинающему программисту?
- Как начинающему программисту развить абстрактно-логическое мышление?
- Помогите пожалуйста начинающему программисту???