![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Romikgy |
|
||||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
если полазить по файлу basi_string.h
то увидим что метод c_str() возвращает
Отселя вывод этот метод возвращает сугубо указатель , и о нуле в конце не беспокоится! -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
||||||
|
|||||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Так это уже конкретная интерпретация std::string'а
![]() Приведу цитату:
|
|||
|
||||
Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
Но то что это изменяет строку, ты отрицать не будешь? Для того ссылка и возвращается и логично срабатывает: "std::cout << st[0];"
Виной тому скорей всего, то что std::string кеширует размер содержащийся строки (этого напрямую нет в стандарте, но там (помойму) написаночто size() и length() должны вополняться за константное время). И std::cout вначале смотрит на std::string::length(), а уж потом выводит, если надо. Т.к. инициализации не было, то std::string::length()==0 ![]() |
||||
|
|||||
bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Daevaorn,
Дело в том, что [] не проверяет правильность индекса. И поэтому операции вида st[0]='x'; без резервирования памяти приводят к непредсказуемым последствиям. Что мы и наблюдаем ![]() |
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
покажи другую , где -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Лушче возьми и почитай для чего в std::string предусмотрен метод c_str().тута на англицком немного написано, что такое c_str() и для чего оно нужно Ну, и вот на закуску: (STLport)
|
||||
|
|||||
Romikgy |
|
||||||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
bel_nikita, это немного не то,
здесь надо смотреть как организовано вывод с помощью и так std::cout<<Data.c_str(); нормально выводит
ты это имел ввиду? Добавлено @ 13:15
Если видишь здесь копируется не обращая внимание ни на нули ни на что , а просто объем, было 6 символов и все 6 запихнули в поток -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |