C ++의 안전한 입력

프로그램에서 사용자에게 정보를 요청해야 할 수 있습니다. C ++에서 정보는 "cin"개체를 사용하여 수집됩니다. 이러한 입력을 보호하지 않으면 프로그램이 "버퍼 오버 플로우"의 희생자가 될 수 있습니다. 실제로 입력 된 문자 수가 원래 계획 한 버퍼 크기를 초과하면 마지막 데이터가 스택의 다른 데이터를 덮어 쓰게되고 잘못된 데이터는 ESP 및 EBP 레지스터에 영향을줍니다.

이러한 데이터 입력을 다른 방법으로 보호 할 수 있습니다.

get () 메소드 사용하기

 #include int main () {char texte [100]; cin.get (texte, 100); // 최고급 매개 변수 : 라오스 Va 라 saisie 두 번째 : taille 최대 드 saisie 반환 0; } 

이 예제는 cin.get의 사용법을 보여줍니다.

입력 된 텍스트가 할당 된 크기를 초과하면 여분의 문자가 무시됩니다.

"getline ()"메소드 사용하기

이 메소드는 get ()과 같이 작동하지만 버퍼의 끝에서 문자를 제거합니다.

사실, 텍스트의 유효성을 검사하기 위해 사용자는 ' \ n '문자에 해당하는 'Enter'키를 누릅니다.

getline ()은이 문자를 제거합니다.

== 작동하지 않습니다 !! ===

제대로 작동하지 않는 코드는 다음과 같습니다.

 #include using namespace std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte :"; cin.get (texte, 100); cout << "Saisies terminées!"; 0을 반환; } 

실제로 두 번째 항목은 실행되지 않고 "Input done! / Saisies terminées!"메시지가 나타납니다.

이 문제를 해결하는 방법?

" ignore () "메소드를 사용해야합니다.

ignore () 메소드

이 메서드는 문자열의 특정 문자를 무시할 수 있습니다.

 #include using namespace std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte :"; cin.ignore (1, '\ n'); // le caractère d' entrée, qui validait auparavant la saisie를 무시하십시오. cin.get (texte, 100); cout << "Saisies terminées!"; 0을 반환; 

이 방법을 사용하면 입력 문자가 무시되고 문제가 해결됩니다.

이전 기사 다음 기사

톱 팁