Sikker indgang i C ++

I dine programmer kan det være nødvendigt at anmode om oplysninger fra brugeren. I C ++ indsamles oplysningerne ved hjælp af "cin" -objekt. Hvis du ikke sikrer disse indgange, vil dit program sandsynligvis blive offer for et "buffer overløb". Faktisk, hvis antallet indtastede tegn overstiger den oprindeligt planlagte bufferstørrelse, overskriver de sidste data andre data på stakken, og fejlagtige data påvirker ESP- og EBP-registre.

Du kan sikre disse dataindtastninger på forskellige måder.

Brug get () -metoden

 #include int main () {char text [100]; cin.get (tekst, 100); // premier paramètre: la où va la saisie anden: veste max de saisie return 0; } 

Dette eksempel illustrerer brugen af ​​cin.get.

Hvis den indtastede tekst overstiger den tildelte størrelse, ignoreres de ekstra tegn.

Ved hjælp af "getline ()" metoden

Denne metode fungerer som get (), men den fjerner tegnet i slutningen af ​​bufferen.

For at validere en tekst, trykker brugeren faktisk på "Enter" -tasten, hvilket svarer til ' \ n ' -tegnet.

getline () fjerner denne karakter.

== Det virker ikke !! ===

Her er en kode, der ikke fungerer korrekt:

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

Faktisk bliver den anden post ikke udført, og meddelelsen "Input done! / Saisies terminées!" "Vises.

Sådan løser du dette problem?

Du skal bruge " ignore () " metoden.

Den ignore () metode

Denne metode tillader at ignorere visse tegn i en streng.

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

Med denne metode ignoreres indtastningskarakteren, og problemet løses.

Forrige Artikel Næste Artikel

Top Tips