![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Maka6er |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 27.2.2007 Где: Киев Репутация: нет Всего: 3 |
Есть код:
Пожалуйста объясните почему не работает 2-й вариант и как это исправить. |
|||
|
||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
в первом случае работаешь с массивом символов, во втором со строковым литералом. Страуструпа почитать вроде его цитата:
|
|||
|
||||
| Dims |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
У меня компилируется без ошибок, а ошибка возникает во время исполнения.
Это происходит потому, что вот в этом коде
ты заводишь указатель, в который кладётся адрес строковой константы, которую компилятор размещает в той области памяти, которую помечает только для чтения. Соответственно, когда ты начинаешь в неё записывать, операционная система выбрасывает исключительную ситуацию (программа выполнила недопустимую операцию). А вот в этом коде
ты в нормальной памяти заводишь массив, который ИНИЦИАЛИЗИРУЕШЬ текстовой строкой. По логике, здесь ошибка в компилляторе. Если написать вот так
то у меня в третьей строчке возникает ошибка во время компилляции Error 1 error C2440: 'initializing' : cannot convert from 'const char *' to 'char *' но ведь ровно то же самое происходит и в строчке
Так что и она должна бы вызывать ошибку. То есть, компиллятор должен требовать, чтобы писалось только так
Однако, если бы такую фичу внесли бы в компиллятор, пропала бы совместимость с программами, написанными до изобретения словечка const. То есть, это как бы место, где компиллятор вынужденно пропускает ошибку преобразования типа, котороая позже и проявляется в ошибке во время выполнения. Это сообщение отредактировал(а) Dims - 14.11.2007, 03:28 |
||||||||||
|
|||||||||||
| zkv |
|
|||
![]() ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2133 Регистрация: 23.7.2006 Где: Санкт-Петербург Репутация: 26 Всего: 92 |
Dims, вроде все это было в приведенной цитате.
|
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
||||
|
||||
| Maka6er |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 27.2.2007 Где: Киев Репутация: нет Всего: 3 |
Спасибо за ответы.
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |