|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|
std::string в char*11.06.2012, 14:13. Показов 23338. Ответов 40
Метки нет (Все метки)
0
|
|
| 11.06.2012, 14:13 | |
|
Ответы с готовыми решениями:
40
ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*')
|
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||
| 11.06.2012, 18:30 | ||
|
0
|
||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 11.06.2012, 18:34 | |
|
Bers, что вкладывается в понятие мёртвая память и почему она мёртвая в том примере?
0
|
|
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 11.06.2012, 18:34 | ||
|
И я не знаю, как работает codepad, но в MSVC в данной программе вообще std::sting str может быть удалён оптимизирующим компилятором, как ненужный объект. Этим можно было бы объяснить неожиданное поведение программы.
0
|
||
|
Заблокирован
|
||||||||
| 11.06.2012, 19:16 | ||||||||
Добавлено через 2 минуты
0
|
||||||||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 11.06.2012, 19:18 | |
|
Ясно. Но непонятно из-за чего такие подозрения в том коде. Вывод строки работает с константной ссылкой на строку и не может вызывать неконстантные функции. А раз так, то указатель остаётся валидным.
0
|
|
|
Заблокирован
|
||||||
| 11.06.2012, 19:24 | ||||||
0
|
||||||
|
2383 / 1667 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
|
|
| 11.06.2012, 19:30 | |
|
Ах, да, присваивание я пропустил. Что ж, там что угодно может быть, согласен.
0
|
|
|
Заблокирован
|
||
| 11.06.2012, 19:54 | ||
|
Как бы.. выдавая наружу си-строку, стринг нарушает инвариант своего класса. Это опасная процедура. И нужна лишь для совместимости с старым си-кодом. Лучше это избегать. Я пользую сие только для сишных конструкций, и никогда при этом стринг не изменяю. Итак проблем хватает.
0
|
||
|
Делаю внезапно и красиво
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
|
||
| 11.06.2012, 19:57 | ||
|
ТУт ещё такая фишка есть, что строки до 16 символов хранятся в объекте std::string в массиве фиксированного размера (в стеке) и только для бОльших строк выделяется память из кучи. С этим могло быть предыдущее поведение связанно.
0
|
||
|
59 / 6 / 1
Регистрация: 09.09.2011
Сообщений: 12
|
||||||
| 16.06.2012, 13:26 | ||||||
12345 12345 qwert qwert qwert так что, скорее всего c_str возвращает ссылку на оригинал.
0
|
||||||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||||
| 16.06.2012, 13:41 | ||||||
|
Она не может возвращать ссылку на оригинал, сама строка может хранится в контейнере std::string блоками в разных участках памяти, что и писали выше. std::string::c_str() лишь генерирует Си строку, указателем на которую можно безопасно пользоваться до любого изменения строки. Вот тот при мер кода, который я так же приводил в пример на 2 странице:
0
|
||||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||||||
| 16.06.2012, 15:00 [ТС] | ||||||||
0
|
||||||||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||
| 16.06.2012, 15:07 | ||
|
Вы покажите цитату где я утверждал, что он всегда будет хранится в разных местах памяти? Ваш пост если честно ни о чем. Ваша реализация кого то там класса, это Ваша реализация, и я почти уверен, что она отличается от всех тех, что используют существующие компиляторы. Я могу привести другую цитату:
0
|
||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
||||
| 16.06.2012, 15:24 [ТС] | ||||
|
Добавлено через 2 минуты
0
|
||||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|||
| 16.06.2012, 15:26 | |||
|
0
|
|||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 16.06.2012, 15:44 [ТС] | |||
|
Добавлено через 3 минуты Гипотез можно строить много, без строгих формулировок в стандарте (а "может" - не строгая, так как ничего не гарантирует) только листинг и спецификация реализации могут пролить свет на то, как в действительности хранятся данные и что возвращается. Добавлено через 2 минуты
0
|
|||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
||||
| 16.06.2012, 15:52 | ||||
|
Да о чем Вы вообще? Куда Вас понесло?
Все выше Вами описанное c_str() не обязана делать, в ее задачу лишь входит генерация Си-строки, и возвращение указателя на нее, ни слова о том, что она должна как то объединять внутреннее представление строки, или вообще делать что то еще с объектом. Так зачем же разработчикам усложнять себе жизнь? Generates a null-terminated sequence of characters (c-string) with the same content as the string object and returns it as a pointer to an array of characters. Добавлено через 3 минуты PS: синоним слова генерировать - создавать. Функция создает массив символов, ограниченный ноль-символом, и по содержанию идентичный строке-объекту.
0
|
||||
|
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
|
|||
| 16.06.2012, 15:59 [ТС] | |||
|
Добавлено через 1 минуту Добавлено через 51 секунду Модераторы, прикройте эту тему с хвостом ни о чём, а то она давно в офтоп свалилась.
0
|
|||
|
1181 / 894 / 94
Регистрация: 03.08.2011
Сообщений: 2,461
|
|
| 16.06.2012, 16:00 | |
|
Она не должна ничего объединять. Она должна создать массив символов ( Си-строку ), идентичный по содержанию string-объекту.
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||
| 16.06.2012, 17:05 | ||||
Что, в стандарт сложно заглянуть? Добавлено через 26 минут Хотя все понятно. В стандарте С++98 ничего такого не описано.
2
|
||||
| 16.06.2012, 17:05 | |
|
(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& Где и почему используют ту или иную строку std::string, char[], System::String^ ? char* vs std::string std::string и/или char*
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|
|
Создание формы заимствованного документа
Maks 03.08.2026
Задача:
Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также
табличная часть со следующими реквизитами:
- Расчетный счет покупателя. . .
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|