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

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

Восстановить пароль Регистрация
 
Enfernuz
 Аватар для Enfernuz
22 / 22 / 1
Регистрация: 11.04.2011
Сообщений: 67
17.08.2011, 23:01     Непонятный приём строки #1
Всем привет.
Считываю строку с консоли:
C++
1
2
3
4
5
char* str = new char(); 
 
cin.getline(str, 80);
   
cout<<str<<endl;
Если вводить больше 24 символов, то почему-то выводятся только первые 24 символа и после них непонятно откуда взявшийся знак '!'. Пробовал считывать через gets(str) --- не помогло.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2011, 23:01     Непонятный приём строки
Посмотрите здесь:

C++ C++.Передача и приём массива функцией.
Непонятный typedef C++
C++ Непонятный синтаксис
C++ Определение количества часов, отводимых на приём зачёта
Непонятный код? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 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
910 / 735 / 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++
6543 / 3963 / 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++
6543 / 3963 / 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++
6543 / 3963 / 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++

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

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

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