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

Переполнение потока или же что-то иное - C++

Восстановить пароль Регистрация
 
Programaster
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 5
22.05.2014, 02:54     Переполнение потока или же что-то иное #1
В общем создал функцию, которая будет запрашивать пользователя вводить строку, пока она не будет меньше чем 25 символов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void EnterString(char string[25])
{ 
    string[0]=0;
    char *str=new char[];
    while (!string[0])
    {
        cin.getline(str,1000);
        
        if (strlen(str)>=25)
            {           
            cout<<"Too many characters";
        }
        else 
        {   int i;
            for (i=0;i<strlen(str);i++)
                string[i]=str[i];
        string[i]='\0';
        }
    }
}
На первый взгляд, всё работает нормально, но если до этого пару раз ввести строку больше чем 25 символов, а потом в какой-то момент, ввести эту строку нормально, то выдает ошибку о переполнении кучи, пытался впихивать функции очистки потока cin.ignore(), cin.clear() , но ничего не помогает, создается впечатление, что дело в чем-то другом, но в чем, понять не могу. От вас прошу либо помочь доделать эту функцию, либо посоветовать другой способ, ограничивающий ввод более чем 25 символов.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 06:38     Переполнение потока или же что-то иное #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Programaster Посмотреть сообщение
На первый взгляд, всё работает нормально
Чей был взгляд?
Куда вы, собственно, вводите? Вот сюда?
C++
1
char *str=new char[];
Память не выделили и вводите?
Programaster
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 5
22.05.2014, 08:36  [ТС]     Переполнение потока или же что-то иное #3
Хмм, так дело в этом? Я думал, что такая строка выделяет себе память по мере добавления символов, и целью было как раз разрешить пользователю вводить сколько угодно символов, но если их будет больше 25, выводить ошибку, в противном случае закидывать её в нужную мне строку, что же, тогда придется ограничится str[1000].Я сейчас проверил, действительно, в таком случае никаких ошибок не выдает, спасибо большое, очень помогли!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 10:30     Переполнение потока или же что-то иное #4
Цитата Сообщение от Programaster Посмотреть сообщение
Я думал, что такая строка выделяет себе память по мере добавления символов, и целью было как раз разрешить пользователю вводить сколько угодно символов,
Для этого есть такой класс: string (класс с автоматическим управлением памятью).
Programaster
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 5
22.05.2014, 13:07  [ТС]     Переполнение потока или же что-то иное #5
alsav22, а, понятно, спасибо, но думаю обойдусь строкой char[1000], не хочется лишнюю библиотеку подключать ради одной функции
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 13:31     Переполнение потока или же что-то иное #6
Цитата Сообщение от Programaster Посмотреть сообщение
не хочется лишнюю библиотеку подключать
Это не библиотека, это класс С++.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 13:52     Переполнение потока или же что-то иное
Еще ссылки по теме:

C++ Вызывть метод одного потока из другого потока
Переполнение буфера . Что делать ? C++
C++ Возникло переполнение буфера, что привело к повреждению внутреннего состояния программы

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

Или воспользуйтесь поиском по форуму:
Programaster
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 5
22.05.2014, 13:52  [ТС]     Переполнение потока или же что-то иное #7
а, действительно, работает и без <cstring>, видимо что-то напутал, спасибо)
Yandex
Объявления
22.05.2014, 13:52     Переполнение потока или же что-то иное
Ответ Создать тему
Опции темы

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