![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Гость05 |
|
|||
|
Unregistered |
Привет, всем!
народ подскажите, текст храниться в std::string его нужно от туда вытащить и поместить в char* проблема в том что std::string.c_str() возвращает const char* как избавиться от const ? Спасибо |
|||
|
||||
| Neitron |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 3.10.2005 Где: Москва Репутация: 2 Всего: 5 |
Скопировать достаточно просто, ты скажи зачем.
А так смотри strcpy Это сообщение отредактировал(а) Neitron - 25.10.2005, 09:07 -------------------- Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей. Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ |
|||
|
||||
| Mayk |
|
|||
![]() ^аВаТаР^ сообщение>> ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2616 Регистрация: 22.5.2005 Где: за границей разум а Репутация: 45 Всего: 134 |
АФАИР, c_str может быть копией исходной строки(если не ошибаюсь). А чтобы получить саму строку надо восползоваться
string::data. А вообще действительно ли нужно одновременно использовать как char[] так и string? Добавлено @ 09:58 да. ну и избавление от const.
Это сообщение отредактировал(а) Mayk - 25.10.2005, 09:59 -------------------- Здесь был кролик. Но его убили. Человеки < кроликов, йа считаю. |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: 9 Всего: 59 |
-------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Для data тоже никто не гарантирует, что это и есть тот самый underlying char array. В любом случае, попытки избавиться от константности без копирования - это зло и желание нарваться на UB. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Я люблю const_cast, он такой забавный:
Вывод в консоли (msvc 7.1): A B Добавлено @ 13:10 Кстати, мне почему-то казалось, что во время выполнения этого кода будет access violation -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 19 Всего: 360 |
Не, не будет "константность" проверяется только на момент компиляции и служит защитным мечанизмом против изменения значений переменных. Это однако не означает, что их изменения повлекут за собой "физические" ошибки. Скорее всего логические.
Проблема товарища мне представляется в другом. Компилятор не даёт передать массив в функцию. Решение: задекларировать функцию правильно, то есть
|
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Почему только логический? Если написано const int dummy = 0xff; то компилятор может соптимизировать эту инструкцию, и в результате такого объекта dummyв памяти может просто не существовать, а будет подставляться именно константа. Потому const_cast снимает действие const непонятно с чего, потому я предположил, что будет access violation. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Компилятор имеет право подставить значение dummy, но выделить память под него он все равно обязан. Другой вопрос, он может это сделать это где-нибудь в read-only сегменте, и тогда можно нарваться на AV. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |