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

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

Войти
Регистрация
Восстановить пароль
 
Programaster
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 5
#1

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

22.05.2014, 02:54. Просмотров 243. Ответов 6
Метки нет (Все метки)

В общем создал функцию, которая будет запрашивать пользователя вводить строку, пока она не будет меньше чем 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 02:54     Переполнение потока или же что-то иное
Посмотрите здесь:

Как сделать что б из потока выводились данные на листбокс C++
Есть два потока и глобальный массив, могут ли потоки перепутать элементы глобального массива или другого контейнера? C++
C++ Массив: Сколько раз пользователь ввел то или иное число?
Из потока вместо кириллицы вводится что попало C++
Как совместить два (или больше) информационных потока? C++
C++ Проверка. Все ли элементы массива имеют то или иное значение(всего их два)
Ошибка вычислений или переполнение (протокол Диффи-Хеллмана) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 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
5415 / 4811 / 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
5415 / 4811 / 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++ Что лучше: динамические массивы, векторы, списки, map контейнеры или что-то ещё?
C++ Возникло переполнение буфера, что привело к повреждению внутреннего состояния программы
Составить программу, которая по введенному номеру выполняет то или иное действие над числами C++

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

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

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