| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > char*, очистить |
| Автор: lv151 16.7.2009, 11:38 |
| как правильно очистить char*? т.е. чтобы все элементы были "" или '\0'. |
| Автор: zim22 16.7.2009, 11:47 | ||||||
указатель на char очищается так:
все элементы? массив указателей на char что-ли?
*** или так:
|
| Автор: Леопольд 16.7.2009, 13:06 | ||||||||
Не совсем. Это не просто указатель на char а "строковой литерал". name = NULL; - просто перетирает значение указателя и он больше не указывает на область памяти, в которой "лежит" литерал. Присваивание строковому литералу - undefined behaviour. Т.е. вот так делать нельзя:
http://www.cplusplus.com/forum/beginner/11740/ lv151 Если можно пользоваться STL то лучше пользуйся std::string и std::vector
|
| Автор: mrbrooks 16.7.2009, 13:08 |
| Леопольд, это все замечательно - но если автор имеет ввиду просто С? |
| Автор: Леопольд 16.7.2009, 13:14 | ||||||||
Тут уже надо уточнить у топикпастера. Добавлено @ 13:17
Я и не говорю что ты так делал. А вот lv151 хочет сделать так, сюдя по его вопросу...
Так будет правильнее, не спорю... |
| Автор: mes 16.7.2009, 13:18 | ||
поэтому везде где можно, нужно объявлять как указатель на константу (const char *) как я понял, это пояснение Леопольд давал для автора, чтоб он такого не захотел сделать Добавлено через 38 секунд опоздал.. |
| Автор: Леопольд 16.7.2009, 13:24 | ||
По моему, некоторые компиляторы позволяют такое присваивание. Другие, тоже скомпилируют этот код, но будет ошибка на этапе выполнения, потому что неконстантный строковой литерал будет "лежать" в readonly области. А если использовать char const* lit = "literal" то программа не скомпилируется. О чём уже упомянул mes. |
| Автор: mes 16.7.2009, 13:27 | ||
насколько я слышал, все - из за обратной совместимости с *гладким Си. P.S. *plain C. |
| Автор: zim22 16.7.2009, 13:32 | ||
|
| Автор: Леопольд 16.7.2009, 13:34 | ||||
Хотя нет, он ведь не объявлял строковой литерал. Он просто спросил как "очистить" char*. Может он память динамически выделил. В общем, вопрос задан плохо, надо задавать уточняющие вопросы. Если я правильно его понял, ему надо сделать что-то вроде этого:
|