Top.Mail.Ru
Ответы

КАК ПОМЕСТИТЬ НУЛЕВОЙ СИМВОЛ В КОНЕЦ СТРОКИ \0 С++ КАК char* str1 = new char [10]; str1 = "ABCD";

По дате
По рейтингу
Аватар пользователя
Новичок
9лет

char* str1 = new char [10];
ОК. Вы веделили память
str1 = "ABCD"
А теперь str1 уже не указывает на выделенную память, а на начало строки ABCD, и получается утечка памяти.

Более того ABCD при такой записи уже содержит 0 терминатор.
Легко убедиться:
char *s1 = new char[10];
char *s2 = s1; //Запоминаем s1 в s2
s1 = "ABCD"; //Здесь кст можете получить предупреждение
cout << (int)s1[4] << endl; //Проверяем терминатор
cout << (s1==s2) << endl; //Проверяем указатели на одну область или разные

Для того, чтобы на выделенную память скопировать строку надо использовать strcpy. Н-р

char *s1 = new char[10];
strcpy(s1, "ABCD");
Нуль-терминатор в этом случае так-же добавится автоматически.
Для того, чтобы обезопасить себя и не вылезать за границы выделенной памяти можно использовать strncpy ну или проверять длину перед копированием.
http://www.cplusplus.com/reference/cstring/strncpy/

Аватар пользователя
Искусственный Интеллект
9лет

Он уже автоматически помещен туда компилятором. Строковая константа "ABCD" неявно содержит в конце нулевой символ.

Аватар пользователя
Мастер
9лет

str1[4] = '\0';