Masukan aman dalam C ++

Dalam program Anda, mungkin diperlukan untuk meminta informasi dari pengguna. Dalam C ++ informasi dikumpulkan menggunakan objek "cin". Jika Anda tidak mengamankan input ini, maka program Anda kemungkinan menjadi korban dari "buffer overflow". Memang, jika jumlah karakter yang dimasukkan melebihi ukuran buffer yang semula direncanakan, maka data terakhir menimpa data lain pada stack, dan data yang salah memengaruhi register ESP dan EBP.

Anda dapat mengamankan input data ini dengan berbagai cara.

Menggunakan metode get ()

 #include int main () {char texte [100]; cin.get (texte, 100); // parameter utama: la où va la saisie second: taille max de saisie return 0; } 

Contoh ini menggambarkan penggunaan cin.get.

Jika teks yang dimasukkan melebihi ukuran yang dialokasikan, karakter tambahan diabaikan.

Menggunakan metode "getline ()"

Metode ini berfungsi seperti get (), tetapi menghapus karakter di akhir buffer.

Memang, untuk memvalidasi teks, pengguna menekan tombol "Enter", yang sesuai dengan karakter ' \ n '.

getline () menghapus karakter ini.

== Tidak berfungsi !! ===

Berikut kode yang tidak berfungsi dengan baik:

 #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!"; return 0; } 

Memang, entri kedua tidak dieksekusi, dan pesan "Input selesai! / Saisies terminées!" "Muncul.

Bagaimana cara mengatasi masalah ini?

Anda harus menggunakan metode " abaikan () ".

Metode Abaikan ()

Metode ini memungkinkan untuk mengabaikan karakter tertentu dalam sebuah string.

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

Dengan metode ini, karakter input diabaikan, dan masalahnya terpecahkan.

Artikel Sebelumnya Artikel Berikutnya

Tips