Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
2 / 2 / 0
Регистрация: 10.09.2018
Сообщений: 21
1

Преобразование std::string в char*

02.09.2019, 21:16. Просмотров 1843. Ответов 3

Несомненно, работать с определенным в STL классом string работать в разы приятнее, чем с обычным char*. Однако иногда все же встает вопрос преобразования std::string в char*, к примеру для работы с WinApi (LPSTR все же char*).
Для чего обычно использую функцию с прототипом

C++
1
char* String_to_char_array(std::string S)
.

Внутри функции оператором new выделяется память, после чего функция возвращает указатель, для которого и выделялась память. Но действия такого рода чреваты утечкой памяти(наверное), поэтому приходится изворачиваться и писать нечто вроде

C++
1
2
3
char * new_char = String_to_char_array(S);
//Используем new_char
delete[] new_char;
За сим два вопроса:
Спасают ли эти действия от утечек?
Можно ли осуществить подобное преобразование изящнее и проще?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.09.2019, 21:16
Ответы с готовыми решениями:

ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri
на вод поступают 2 строки типа string. определить количество вхождений строки 2 в строку 1 ошибка...

ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
int main() { string fileName, currWord, currMax = &quot;&quot;; cin&gt;&gt;fileName; ...

Запрошено преобразование от ‘const std::string*’ к нескалярному типу ‘std::string’
private: std::string firstName; }; std::string ClientData::getFirstName() const{ ...

Странная ошибка: [Error] no match for call to '(std::string {aka std::basic_string<char>}) (int&)'
У меня появляется проблема при компиляции сей программы: #include &lt;iostream&gt; #include &lt;string&gt;...

3
Продавец времени
4006 / 2280 / 513
Регистрация: 12.03.2015
Сообщений: 11,397
02.09.2019, 21:20 2
ну есть жэж у класса std::string метод c_str(). Тебе его недостаточно? Почему?
1
(80 / 20 || 50 / 50) = x
1648 / 1121 / 432
Регистрация: 16.08.2014
Сообщений: 4,688
Записей в блоге: 1
02.09.2019, 21:23 3
Цитата Сообщение от Shalfey_278 Посмотреть сообщение
Преобразование std::string в char*
http://www.cplusplus.com/refer... ing/c_str/
Цитата Сообщение от Shalfey_278 Посмотреть сообщение
Спасают ли эти действия от утечек?
Можно ли осуществить подобное преобразование изящнее и проще?
возможно raii будет изящнее использовать.
1
4832 / 3260 / 1365
Регистрация: 07.05.2019
Сообщений: 10,040
Записей в блоге: 1
02.09.2019, 21:24 4
Лучший ответ Сообщение было отмечено Shalfey_278 как решение

Решение

Цитата Сообщение от Shalfey_278 Посмотреть сообщение
Несомненно, работать с определенным в STL классом string работать в разы приятнее, чем с обычным char*. Однако иногда все же встает вопрос преобразования std::string в char*, к примеру для работы с WinApi (LPSTR все же char*).
Для чего обычно использую функцию с прототипом
Какая-то плохая функция.
Используй S.c_str(), либо S.data(), для неконстантных строк.
На худой конец - std::unique_ptr<char[]> String_to_char_array(const std::string &S)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.09.2019, 21:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&
astxx::manager::connection::connection(std::basic_string&lt;char, std::char_traits&lt;char&gt;,...

Где и почему используют ту или иную строку std::string, char[], System::String^ ?
Где и почему используют ту или иную строку std::string, char, System::String^ ? Объясните...

Преобразование из std::string - в std::wstring
Как попроще преобразовать string в широкую строку wstring? Так не получается: #include...

char* vs std::string
При чтении чужих сорцов, обратил внимание, что в роли аргументов для функций/методов, как правило...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.