Сигурен вход в C ++

В програмите ви може да се наложи да поискате информация от потребителя. В C ++ информацията се събира чрез "cin" обект. Ако не осигурите тези входове, вашата програма вероятно ще бъде жертва на "препълване на буфера". Всъщност, ако броят на въведените знаци надвишава първоначално планирания размер на буфера, тогава последните данни презаписват други данни в стека, а погрешните данни засягат регистрите на ESP и EBP.

Можете да осигурите въвеждане на тези данни по различни начини.

Използване на метода get ()

 #include int main () {char texte [100]; cin.get (texte, 100); // premier paramètre: la où va la saisie втори: taille max de saisie return 0; } 

Този пример илюстрира използването на cin.get.

Ако въведеният текст надвишава определения размер, допълнителните знаци се игнорират.

Използване на метода "getline ()"

Този метод работи като get (), но премахва символа в края на буфера.

Всъщност, за да потвърди текста, потребителят натиска клавиша "Enter", която съответства на символа " n ".

getline () премахва този знак.

== Не работи !! ===

Ето един код, който не работи правилно:

 #include using namespace std; int main () {char entree [100]; int choix; cout <> choix; cout << "Въведете текста:"; cin.get (texte, 100); cout << "Saisies terminées!"; return 0; } 

Всъщност, вторият запис не се изпълнява и се появява съобщението "Input done! / Saisies terminées!".

Как да решим този проблем?

Трябва да използвате метода " ignore () ".

Методът ignore ()

Този метод позволява да се игнорират определени символи в низ.

 #include using namespace std; int main () {char entree [100]; int choix; cout <> choix; cout << "Въведете текста:"; cin.ignore (1, '\ t // игнорират le caractère d'entrée, който е валиден за закупуване. cin.get (texte, 100); cout << "Saisies terminées!"; return 0; 

С този метод входният символ се игнорира и проблемът се решава.

Предишна Статия Следваща Статия

Топ Съвети