| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Как в с_str() избавиться от const ? |
| Автор: Гость05 25.10.2005, 09:04 |
| Привет, всем! народ подскажите, текст храниться в std::string его нужно от туда вытащить и поместить в char* проблема в том что std::string.c_str() возвращает const char* как избавиться от const ? Спасибо |
| Автор: Neitron 25.10.2005, 09:07 |
| Скопировать достаточно просто, ты скажи зачем. А так смотри strcpy |
| Автор: Mayk 25.10.2005, 09:57 | ||
| АФАИР, c_str может быть копией исходной строки(если не ошибаюсь). А чтобы получить саму строку надо восползоваться string::data. А вообще действительно ли нужно одновременно использовать как char[] так и string? Добавлено @ 09:58 да. ну и избавление от const.
|
| Автор: Vyacheslav 25.10.2005, 10:04 | ||
|
| Автор: Void 25.10.2005, 12:13 | ||
Для data тоже никто не гарантирует, что это и есть тот самый underlying char array. В любом случае, попытки избавиться от константности без копирования - это зло и желание нарваться на UB. |
| Автор: srd 25.10.2005, 13:09 | ||
Я люблю const_cast, он такой забавный:
Вывод в консоли (msvc 7.1): A B Добавлено @ 13:10 Кстати, мне почему-то казалось, что во время выполнения этого кода будет access violation |
| Автор: sergejzr 25.10.2005, 13:32 | ||
| Не, не будет "константность" проверяется только на момент компиляции и служит защитным мечанизмом против изменения значений переменных. Это однако не означает, что их изменения повлекут за собой "физические" ошибки. Скорее всего логические. Проблема товарища мне представляется в другом. Компилятор не даёт передать массив в функцию. Решение: задекларировать функцию правильно, то есть
|
| Автор: srd 25.10.2005, 13:44 | ||
Почему только логический? Если написано const int dummy = 0xff; то компилятор может соптимизировать эту инструкцию, и в результате такого объекта dummyв памяти может просто не существовать, а будет подставляться именно константа. Потому const_cast снимает действие const непонятно с чего, потому я предположил, что будет access violation. |
| Автор: Void 25.10.2005, 14:10 | ||
Компилятор имеет право подставить значение dummy, но выделить память под него он все равно обязан. Другой вопрос, он может это сделать это где-нибудь в read-only сегменте, и тогда можно нарваться на AV. |