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

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

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

gets() проверка ввода - C++

01.01.2013, 23:12. Просмотров 533. Ответов 4
Метки нет (Все метки)

возникло слабое звено в программке
C++
1
2
3
4
5
6
...
max_length = 100;
line = new char[max_length];
...
gets(line);
...
вопрос такой: как защитить программу от ввода строки больше 100 символов или как с генерировать исключение
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2013, 23:12     gets() проверка ввода
Посмотрите здесь:

Проверка ввода C++
C++ проверка ввода C++
Проверка ввода C++
Проверка ввода C++
Проверка ввода данных C++
C++ Проверка ввода
C++ Проверка ввода чисел
C++ Проверка корректности ввода
C++ Проверка ввода символов
Проверка потока ввода C++
C++ Проверка корректности ввода
Проверка ввода переменной C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
02.01.2013, 00:13     gets() проверка ввода #2
plag, fgets можно ввести определенное число символов.
Цитата Сообщение от plag Посмотреть сообщение
или как с генерировать исключение
Читать посимвольно, и в случаи если покажется что много символов, то кинуть какой-нибудь эксепшен.

Добавлено через 22 секунды
plag, только все это функции языка Си.
m1Rr0r
247 / 230 / 15
Регистрация: 05.02.2010
Сообщений: 3,248
Завершенные тесты: 2
02.01.2013, 00:46     gets() проверка ввода #3
Можно сделать так =)
C++
1
cin.getline(line, max_length);
Добавлено через 1 минуту
или
C++
1
2
3
char temp;
for(int i = 0; i < max_length; i++)
line[i] = getc(temp);
nonedark2008
852 / 591 / 116
Регистрация: 28.07.2012
Сообщений: 1,586
02.01.2013, 01:08     gets() проверка ввода #4
Если пользуешься Visual Studio(Не уверен, есть ил это в других), то есть безопасный вариант функции gets_s.
rangerx
1931 / 1540 / 141
Регистрация: 31.05.2009
Сообщений: 2,905
02.01.2013, 02:07     gets() проверка ввода #5
Так можно читать не более, чем необходимо(всё лишнее будет игнорироваться)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <limits>
 
std::istream& readln(char* buf, std::streamsize n, std::istream& stream = std::cin) {        
    
    if(!stream.getline(buf, n) && !stream.eof()) {
    
        stream.clear();
        stream.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }    
    
    return stream;
}
 
int main() {
    
    const int n = 11;    
    char buf[n];
    
    for(int i = 0; i < 5; ++i) {
            
        if(!readln(buf, n))
            return 1;
        
        std::cout << buf << std::endl;
    }
}
Yandex
Объявления
02.01.2013, 02:07     gets() проверка ввода
Ответ Создать тему
Опции темы

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