Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

22.05.2014, 02:54. Просмотров 272. Ответов 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 символов.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 02:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переполнение потока или же что-то иное (C++):

Массив: Сколько раз пользователь ввел то или иное число? - C++
Пользователь вводит количество чисел n, а потом вводит сами числа. Каждое из них от 1 до 10 гарантировано. Сколько раз он ввел то или иное...

Проверка. Все ли элементы массива имеют то или иное значение(всего их два) - C++
Всем доброго времени суток. Проблема в следующем. Пусть у нас есть двумерный массив. После некоторых пертубаций, в нем остаются только 0 и...

Составить программу, которая по введенному номеру выполняет то или иное действие над числами - C++
Даны два действительных положительных числа x и y. Арифметические действия над числами пронумерованые (1-сложение, 2-вычитание,...

Переполнение буфера . Что делать ? - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { char in; /* строка...

Переполнение буфера: что тут происходит? - C++
Добрый вечер; у меня есть уязвимая программа, которая в буфер длиной 30 копирует строку, переданную как аргумент этой программе. Делал по...

Ошибка вычислений или переполнение (протокол Диффи-Хеллмана) - C++
привет всем!! я реализовал протокол диффи хеллмана, но он работеат только с маленькими числами,что нужно изменить чтоб он работал с...

6
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 06:38 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Programaster Посмотреть сообщение
На первый взгляд, всё работает нормально
Чей был взгляд?
Куда вы, собственно, вводите? Вот сюда?
C++
1
char *str=new char[];
Память не выделили и вводите?
0
Programaster
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 5
22.05.2014, 08:36  [ТС] #3
Хмм, так дело в этом? Я думал, что такая строка выделяет себе память по мере добавления символов, и целью было как раз разрешить пользователю вводить сколько угодно символов, но если их будет больше 25, выводить ошибку, в противном случае закидывать её в нужную мне строку, что же, тогда придется ограничится str[1000].Я сейчас проверил, действительно, в таком случае никаких ошибок не выдает, спасибо большое, очень помогли!
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 10:30 #4
Цитата Сообщение от Programaster Посмотреть сообщение
Я думал, что такая строка выделяет себе память по мере добавления символов, и целью было как раз разрешить пользователю вводить сколько угодно символов,
Для этого есть такой класс: string (класс с автоматическим управлением памятью).
0
Programaster
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 5
22.05.2014, 13:07  [ТС] #5
alsav22, а, понятно, спасибо, но думаю обойдусь строкой char[1000], не хочется лишнюю библиотеку подключать ради одной функции
0
alsav22
5429 / 4824 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.05.2014, 13:31 #6
Цитата Сообщение от Programaster Посмотреть сообщение
не хочется лишнюю библиотеку подключать
Это не библиотека, это класс С++.
0
Programaster
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 5
22.05.2014, 13:52  [ТС] #7
а, действительно, работает и без <cstring>, видимо что-то напутал, спасибо)
0
22.05.2014, 13:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 13:52
Привет! Вот еще темы с ответами:

Возникло переполнение буфера, что привело к повреждению внутреннего состояния программы - C++
Возникло переполнение буфера, помогите найти ошибку и, по возможности, исправить #include &quot;stdafx.h&quot; #include &quot;stdafx.h&quot; #include...

CalcField или что-то иное? - Delphi
Добрый день, уважаемые участники форума. Работаю с делфи недавно, но во всем пытаюсь разобраться самостоятельно, но все же кое в чем без...

Префиксная сумма или что-то иное - Алгоритмы
Не все числа одинаково полезны. Если, например, вам потребуется насобирать сумму как можно больше, то вам ни к чему использовать...

Замена кода на слово или что-то иное - PHP
У меня есть ,например, страничка html в ней есть какое-то код - {zamena} Как мне посредством php, загрузить эту страничку, а на месте...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.