Nhập an toàn trong C ++

Trong các chương trình của bạn, có thể cần phải yêu cầu thông tin từ người dùng. Trong C ++, thông tin được thu thập bằng cách sử dụng đối tượng "cin". Nếu bạn không bảo mật các đầu vào này, thì chương trình của bạn có thể là nạn nhân của "tràn bộ đệm". Thật vậy, nếu số lượng ký tự được nhập vượt quá kích thước bộ đệm dự kiến ​​ban đầu, thì dữ liệu cuối cùng sẽ ghi đè lên dữ liệu khác trên ngăn xếp và dữ liệu sai sẽ ảnh hưởng đến các thanh ghi ESP và EBP.

Bạn có thể bảo mật những dữ liệu đầu vào theo những cách khác nhau.

Sử dụng phương thức get ()

 #include int main () {char texte [100]; cin.get (texte, 100); // Premier paramètre: la où va la saisie thứ hai: taille max de saisie return 0; } 

Ví dụ này minh họa việc sử dụng cin.get.

Nếu văn bản được nhập vượt quá kích thước được phân bổ, các ký tự phụ sẽ bị bỏ qua.

Sử dụng phương thức "getline ()"

Phương thức này hoạt động như get (), nhưng nó loại bỏ ký tự ở cuối bộ đệm.

Thật vậy, để xác thực văn bản, người dùng nhấn phím "Enter", tương ứng với ký tự ' \ n '.

getline () loại bỏ ký tự này.

== Nó không hoạt động !! ===

Đây là một mã không hoạt động đúng:

 #incolee sử dụng không gian tên std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte:"; cin.get (texte, 100); cout << "Saisies terminées!"; trả về 0; } 

Thật vậy, mục nhập thứ hai không được thực thi và thông báo "Nhập xong! / Saisies terminées!" "Xuất hiện.

Làm thế nào để giải quyết vấn đề này?

Bạn phải sử dụng phương thức " bỏ qua () ".

Phương thức bỏ qua ()

Phương pháp này cho phép bỏ qua các ký tự nhất định trong một chuỗi.

 #incolee sử dụng không gian tên std; int main () {char entree [100]; int choix; cout <> choix; cout << "Entrez un texte:"; cin.ignore (1, '\ n'); // bỏ qua le caractère d'entrée, qui validait auparavant la saisie. cin.get (texte, 100); cout << "Saisies terminées!"; trả về 0; 

Với phương thức này, ký tự đầu vào bị bỏ qua và vấn đề được giải quyết.

Bài TrướC TiếP Theo Bài ViếT

Lên Trên LờI Khuyên