Le problème est que la taille des chaînes est faible. Les bits débordants sont donc affectés à la chaîne suivante.Empêcher le dépassement de tampon lors de l'utilisation de cin.getline et de fgets en conjugaison
Je suis récemment venu de savoir que nous ne devrions pas utiliser fflush (stdin) pour rejeter la séquence indésirable dans le flux d'entrée lors de l'utilisation getline comme il a un comportement non défini. Les gens recommandent d'utiliser cin.ignore() à la place.
Mais que devons-nous utiliser pour ignorer la séquence non désirée dans le flux d'entrée avec fgets?
#include <iostream>
#include <string>
#include <cstdio>
using namespace std;
int main() {
string cpp;
char c1[6];
char c2[5];
// Reading C++ string: GETLINE
getline(cin, cpp);
// Reading C string: CIN.GETLINE
cin.getline(c1, sizeof(c1));
// cin.ignore(); DOESNT WORK
// fflush(stdin); UNDEFINED BEHAVIOR
// Reading C string: FGETS
fgets(c2, sizeof(c2), stdin);
cout << " " << cpp << '\n' << c1 << '\n' << c2 << '\n';
return 0;
}
Pourriez-vous donner un exemple d'entrée, la sortie observée et la sortie désirée. – user2079303
@ user2079303 Terminé. En fait, la sortie désirée est capable d'entrer la chaîne ** c2 **. Actuellement, les caractères survolés sont stockés dans c2. –