Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
#1

Непонятный приём строки - C++

17.08.2011, 23:01. Просмотров 534. Ответов 8
Метки нет (Все метки)

Всем привет.
Считываю строку с консоли:
C++
1
2
3
4
5
char* str = new char(); 
 
cin.getline(str, 80);
   
cout<<str<<endl;
Если вводить больше 24 символов, то почему-то выводятся только первые 24 символа и после них непонятно откуда взявшийся знак '!'. Пробовал считывать через gets(str) --- не помогло.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2011, 23:06     Непонятный приём строки #2
Цитата Сообщение от Enfernuz Посмотреть сообщение
C++
1
char* str = new char();
память выделена под один символ

Добавлено через 35 секунд
C++
1
char* str = new char [80]();
xAtom
 Аватар для xAtom
911 / 736 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
17.08.2011, 23:10     Непонятный приём строки #3
C++
1
2
3
4
char* str = new char[128];
cin.getline(str, 127);
delete[] str;
str = NULL;
Добавлено через 1 минуту
Maxwe11, быстрее оказался...
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2011, 23:12     Непонятный приём строки #4
Цитата Сообщение от xAtom Посмотреть сообщение
cin.getline(str, 127);
только getline учитывает нулевой символ
C++
1
cin.getline(str, 128);
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
17.08.2011, 23:22  [ТС]     Непонятный приём строки #5
Спасибо.
Чтобы прошарить до конца: если я выделяю память под один символ, то почему считывается 24?
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2011, 23:26     Непонятный приём строки #6
Цитата Сообщение от Enfernuz Посмотреть сообщение
Чтобы прошарить до конца: если я выделяю память под один символ, то почему считывается 24?
вы пишите в чужую память потому последствия непредсказуемы
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
17.08.2011, 23:33  [ТС]     Непонятный приём строки #7
ок, а как выделить дополнительную память под уже выделенный массив?

C++
1
2
3
4
5
6
while(*str)
{
str++;
}
 
str = new char[n]();
?
Jupiter
Каратель
Эксперт C++
6548 / 3968 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.08.2011, 23:55     Непонятный приём строки #8
перевыделять, копировать, удалять

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
int* arr = new int [10]();
for (int i = 0; i < 10; ++i)
   arr[i] = i;
 
int* tmp = new int [20]();
memcpy(tmp, arr, 10 * sizeof(int)); //std::copy
delete [] arr;
arr = tmp;
//продолжaем использовать arr
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2011, 00:02     Непонятный приём строки
Еще ссылки по теме:

Непонятный код C++
Передача звука, приём C++
C++. Непонятный символ C++
Непонятный цикл C++
C++ Реализовать программу, моделирующую приём заказов в интернет-фирме, согласно условию

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
18.08.2011, 00:02  [ТС]     Непонятный приём строки #9
Большое спасибо!
Yandex
Объявления
18.08.2011, 00:02     Непонятный приём строки
Ответ Создать тему
Опции темы

Текущее время: 00:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru