Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 27.06.2011, 17:57   #1
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Странная вещь со строками

Вот код:
char str[6]="Hello";
cout << str;
for (int i=0; i<6; i++) {
	str[i]='';
}
cout << str;
Компилятор говорит, " empty character constant ".
(Offline)
 
Ответить с цитированием
Старый 27.06.2011, 17:59   #2
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Странная вещь со строками

ничего странного. '' - это отсутствие чего либо. НОЛЬ. ПУСТО. а символ в си это байт. ты пытаешся байту присвоить ничего.
__________________

(Offline)
 
Ответить с цитированием
Старый 27.06.2011, 18:02   #3
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: Странная вещь со строками

А как тогда строку отчистить? А вообще реально ли изменить строку, не прибегая к функциям strcpy etc.
(Offline)
 
Ответить с цитированием
Старый 27.06.2011, 18:02   #4
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: Странная вещь со строками

строку очищают пробелами. или юзают string

http://www.cplusplus.com/reference/string/string/

А вообще реально ли изменить строку, не прибегая к функциям strcpy
etc.
реально - посимвольно
__________________

(Offline)
 
Ответить с цитированием
Старый 27.06.2011, 18:17   #5
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Странная вещь со строками

for (int i=0; i<6; i++) {
str[i]='';
}
правильно так:
	str[0]=0;
но строка по-прежнему будет занимать память. Этим ты только укажешь ей нулевую длину (конец нультерминированной строки находится в байте с кодом ноль).
Для непосредственного высвобождения памяти, строку надо создавать операторм new (или функциями malloc/realloc в Си-стиле)
char *str=new char[6];
Тогда удалить:
delete[]str;
.
Напомню, что char[6] рассчитан максимум на 5 байт текста (с индексами от 0 до 4) и один (с индексом 5) "закрывающий" строку ноль. Незакрытая строка может быть неправильно обработана функциями и это выйдет боком в произвольном месте (например, ты затрёшь рядом расположенную инфу).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
baton4ik (27.06.2011)
Старый 27.06.2011, 19:21   #6
falcon
Разработчик
 
Аватар для falcon
 
Регистрация: 12.07.2008
Сообщений: 523
Написано 196 полезных сообщений
(для 470 пользователей)
Ответ: Странная вещь со строками

не прибегая к функциям strcpy etc.
и зачем это может понадобиться...
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 08:39.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com