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

Готовый код.Подскажите,как ограничить ввод строки. - C++

Восстановить пароль Регистрация
 
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
02.07.2010, 21:17     Готовый код.Подскажите,как ограничить ввод строки. #1
Как правильно ограничить строку при помощи strncpy,"вводимую" сразу в переменную структуры?


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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <cstdlib>
#include <iostream>
#include <new>
#include <cstring>
struct chaff
{
    char dross[20];
    int slag;
};
char buf[50];////BUFFER 
using namespace std;
 
int main(int argc, char *argv[])
{
    /*chaff GP[2] = {{"general p",9},//0
                   {"two posit",7} //1
                  };*/
    char input;
    char ddrs;
    int intslag;
    chaff * p1 = new (buf) chaff[2];
     cout<<"vvedite 'char dross' i 'int slag':"<<endl;
     for(int i=0;i<5;i++)
      {
       //cin.getline(p1[i].dross,20);
       cin>>ddrs;
       strncpy(p1[i].dross,ddrs,19)
        p1[i].dross[19] = '\0';
       cin>>intslag;
       cin.get();
       p1[i].slag = intslag;
      }
      cout<<"vivod dannih i adresov\n";
     for(int i=0;i<5;i++)
       {
         cout<<p1[i].dross<<" po adresu "<<&p1[i].dross<<" ;";
         cout<<p1[i].slag<<" po adresu "<<&p1[i].slag<<endl;
       }
    system("PAUSE");
    return EXIT_SUCCESS;
}
В таком вот варианте вроде работает,но если происходит переполнение массива,программа завершается:

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
int main(int argc, char *argv[])
{
    /*chaff GP[2] = {{"general p",9},//0
                   {"two posit",7} //1
                  };*/
    char input;
    char ddrs;
    int intslag;
    chaff * p1 = new (buf) chaff[2];
     cout<<"vvedite 'char dross' i 'int slag':"<<endl;
     for(int i=0;i<5;i++)
      {
       cin.getline(p1[i].dross,20); 
       cin>>intslag;
       cin.get();
       p1[i].slag = intslag;
      }
      cout<<"vivod dannih i adresov\n";
     for(int i=0;i<5;i++)
       {
         cout<<p1[i].dross<<" po adresu "<<&p1[i].dross<<" ;";
         cout<<p1[i].slag<<" po adresu "<<&p1[i].slag<<endl;
       }
    system("PAUSE");
    return EXIT_SUCCESS;
}
p.s.Как можно в этой программе использовать обычную операцию new для выделения буфера памяти?
C++
1
char * pb = new char[50]
, т.е. потом использовать в коде указатель pb вместо массива buf:
C++
1
chaff * p1 = new (pb) chaff[2];
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2010, 21:17     Готовый код.Подскажите,как ограничить ввод строки.
Посмотрите здесь:

C++ подскажите как ограничить временное пространство
Готовый код.Как перестроить структуру под класс.wxDex-C++ C++
C++ Есть готовый код C++ (Code Composer Studio). Копирование матрицы. Как исправить ошибки?
C++ Ввод строки типа {a,b,c,d,f,{a,b,c,f},g,h,j}, исправить код
как написать готовый код паскаль на с++? C++
C++ Подскажите как сделать ввод с клавиатуры пользователем
C++ Подскажите, как добавить проверку на ввод букв? код внутри
Исключение С++. Ограничить ввод 1888 годом C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
03.07.2010, 00:32     Готовый код.Подскажите,как ограничить ввод строки. #2
В таком вот варианте вроде работает,но если происходит переполнение массива,программа завершается:
Юзайте массив больше... Или ловите исключения
Yandex
Объявления
03.07.2010, 00:32     Готовый код.Подскажите,как ограничить ввод строки.
Ответ Создать тему
Опции темы

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