![]() |
|
Модераторы: bsa |
![]()
|
|
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
как правильно очистить char*?
т.е. чтобы все элементы были "" или '\0'. |
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
указатель на char очищается так:
все элементы? массив указателей на char что-ли?
*** или так:
Это сообщение отредактировал(а) zim22 - 16.7.2009, 11:55 |
||||||
|
|||||||
| Леопольд |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Не совсем. Это не просто указатель на char а "строковой литерал". name = NULL; - просто перетирает значение указателя и он больше не указывает на область памяти, в которой "лежит" литерал. Присваивание строковому литералу - undefined behaviour. Т.е. вот так делать нельзя:
http://www.cplusplus.com/forum/beginner/11740/ lv151 Если можно пользоваться STL то лучше пользуйся std::string и std::vector
Это сообщение отредактировал(а) Леопольд - 16.7.2009, 13:12 -------------------- вопросов больше чем ответов |
||||||||
|
|||||||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 19 Всего: 306 |
Леопольд, это все замечательно - но если автор имеет ввиду просто С?
|
|||
|
||||
| zim22 |
|
||||||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
я знаю что так делать нельзя. где я так делал?
нет. это указатель на константный строковый литерал. Это сообщение отредактировал(а) zim22 - 16.7.2009, 13:18 |
||||||
|
|||||||
| Леопольд |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Тут уже надо уточнить у топикпастера. Добавлено @ 13:17
Я и не говорю что ты так делал. А вот lv151 хочет сделать так, сюдя по его вопросу...
Так будет правильнее, не спорю... Это сообщение отредактировал(а) Леопольд - 16.7.2009, 13:19 -------------------- вопросов больше чем ответов |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
поэтому везде где можно, нужно объявлять как указатель на константу (const char *) как я понял, это пояснение Леопольд давал для автора, чтоб он такого не захотел сделать Добавлено через 38 секунд опоздал.. |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
По моему, некоторые компиляторы позволяют такое присваивание. Другие, тоже скомпилируют этот код, но будет ошибка на этапе выполнения, потому что неконстантный строковой литерал будет "лежать" в readonly области. А если использовать char const* lit = "literal" то программа не скомпилируется. О чём уже упомянул mes. Это сообщение отредактировал(а) Леопольд - 16.7.2009, 13:27 -------------------- вопросов больше чем ответов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| zim22 |
|
|||
|
depict1 ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2682 Регистрация: 15.1.2009 Где: Украина Репутация: 29 Всего: 69 |
||||
|
||||
| Леопольд |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 3 Всего: 13 |
Хотя нет, он ведь не объявлял строковой литерал. Он просто спросил как "очистить" char*. Может он память динамически выделил. В общем, вопрос задан плохо, надо задавать уточняющие вопросы. Если я правильно его понял, ему надо сделать что-то вроде этого:
Это сообщение отредактировал(а) Леопольд - 16.7.2009, 13:38 -------------------- вопросов больше чем ответов |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |