forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Странная вещь со строками (http://forum.boolean.name/showthread.php?t=15006)

Hagrael 27.06.2011 17:57

Странная вещь со строками
 
Вот код:
Код:

char str[6]="Hello";
cout << str;
for (int i=0; i<6; i++) {
        str[i]='';
}
cout << str;

Компилятор говорит, " empty character constant ".

mr.DIMAS 27.06.2011 17:59

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

Hagrael 27.06.2011 18:02

Ответ: Странная вещь со строками
 
А как тогда строку отчистить? А вообще реально ли изменить строку, не прибегая к функциям strcpy etc.

mr.DIMAS 27.06.2011 18:02

Ответ: Странная вещь со строками
 
строку очищают пробелами. или юзают string

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

Цитата:

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

impersonalis 27.06.2011 18:17

Ответ: Странная вещь со строками
 
Цитата:

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) "закрывающий" строку ноль. Незакрытая строка может быть неправильно обработана функциями и это выйдет боком в произвольном месте (например, ты затрёшь рядом расположенную инфу).

falcon 27.06.2011 19:21

Ответ: Странная вещь со строками
 
Цитата:

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


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot