|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.11.2014, 20:44 | #1 |
Пользователь
Регистрация: 27.11.2014
Сообщений: 30
|
Указатели на char
Помогите разобраться в чём ошибка и как можно проиллюстрировать её.
Было написано: 1) Код:
Код:
1) Код:
Код:
Мяу
|
27.11.2014, 20:50 | #2 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
1) "Hello" - это не char *, а const char *, т.е. этот "массив" менять нельзя. Работать это не должно, но может и в данном случае повезло.
2) память никто не выделял под строку, куда указывает указатель известно только ежу, что будет затирать строкой функция strcpy уже даже и еж не узнает. |
27.11.2014, 20:53 | #3 |
Пользователь
Регистрация: 27.11.2014
Сообщений: 30
|
А поподробней можно? почему не должно работать? Можно какие нибудь примеры или ссылки? Сам искал, всё облазил, толком и не догнал почему так нельзя.
А при том подходе, который указал препод, всё сработает как надо?
Мяу
|
27.11.2014, 22:54 | #4 |
Старожил
Регистрация: 22.05.2007
Сообщений: 9,065
|
Про указатели внимательнее читайте в книжках, т.к. всё это от непонимания механизма указателей.
У препода первый пример не сработает. Или он имел ввиду char s[] = "Hello" или лоханулся не меньше вашего, т.к. суть кода 1 в 1. Раз учите С++, то запомните аббревиатуру UB - это undefined behavior, т.е. неопределенное поведение (в плюсах пригодится). Используется эта аббревиатура для кода, который компилируется, но работу которого никто не гарантирует. Он может быть будет работать, может не будет, может результат работы будет неправильный, неизвестно и всё тут. Так вот компилятор у вас наверняка какой-нибудь древний и корявый, что на нём это компилится и работает без вылетов. 1) Почему нельзя менять константу я расписывать не буду. Так принято и всё тут. s[1] = 'a'; - фактически именно что изменение константы "Hello", а никакое не изменение буквы в строке/массиве s. s - тупо указатель на кусок памяти, целое число размером в 32 бита (ну, или 64). 2) Память под строку не выделена, указатель никуда не выставлен. Куда strcpy должна скопировать строку? С тем же успехом можно завязать глаза и начать стучать по клавиатуре, думая о программе. Есть вероятность, что в итоге получится то, что нужно. |
28.11.2014, 10:47 | #5 |
Пользователь
Регистрация: 27.11.2014
Сообщений: 30
|
Спасибо, разобрался. Мяу =)
Мяу
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
char * conver (char *somestr) вылетает с exception | mosq | Общие вопросы C/C++ | 2 | 23.02.2013 02:23 |
как исправить ошибку invalid conversion from const char* to char | Ника К | Помощь студентам | 5 | 01.06.2012 00:13 |
Проблема с программой. Нельзя преобразовать тип set of char к char | Lasso | Помощь студентам | 5 | 07.06.2011 12:03 |
преобразование типов char-const char | student101 | Помощь студентам | 8 | 01.12.2010 20:45 |
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql | Muahahaha | PHP | 8 | 27.03.2008 11:17 |