C++: controler la taille d'un cin
Résolu
Teemsis
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
je dois réaliser un programme qui stock la chaîne de caractère entrée par l'utilisateur dans un tableau de taille égale à celle de la chaîne entrée.
Une petite idée?
Merci d'avance.
je dois réaliser un programme qui stock la chaîne de caractère entrée par l'utilisateur dans un tableau de taille égale à celle de la chaîne entrée.
Une petite idée?
Merci d'avance.
3 réponses
Par définition, un mot c'est déjà un tableau de caractères !!!
int main () { std::string s; std::cout << "mot : "; std::cin >> s; char* tab = (char*) s.c_str(); for (unsigned i=0; i<s.size(); i++) std::cout << tab[i] << " "; return 0; }
Mon problème c'était qu'au lieu de créer un string, je faisais un char*.
Donc si mon mot excèdait la taille de mon char* alors il y avait une erreur de segmentation (d'où la volonté de faire un char[] de taille égale à la chaîne entrée).
Ce qui me semble bizarre c'est que ton code sous entend que string gère automatiquement la taille de s.
Peux-tu confirmer?
Aucun risque de dépasser l'espace mémoire qui est alloué à s?
Si c'est le cas c'est extra, merci beaucoup du coup de main.
Donc si mon mot excèdait la taille de mon char* alors il y avait une erreur de segmentation (d'où la volonté de faire un char[] de taille égale à la chaîne entrée).
Ce qui me semble bizarre c'est que ton code sous entend que string gère automatiquement la taille de s.
Peux-tu confirmer?
Aucun risque de dépasser l'espace mémoire qui est alloué à s?
Si c'est le cas c'est extra, merci beaucoup du coup de main.
Oui, c'est alloué automatiquement, au départ ton string a une capacité qui lui est réservée et si tu la dépasses il augmente automatiquement cette capacité en réservant plus de mémoire.
Ta seule limite au niveau de la taille de la chaine de caractères c'est std::string::max_size()
Voir aussi : std::string::capacity() et std::string::reserve(size_t)
Ta seule limite au niveau de la taille de la chaine de caractères c'est std::string::max_size()
Voir aussi : std::string::capacity() et std::string::reserve(size_t)
Okay autant pour moi, j'ai regardé et tu as raison c'est aussi simple que ça.
Vive les strings !
C'est idiot mais comme en C on utilise pas les strings donc je pensais qu'il fallait faire un algo un peu lourd en essayant de gérer chaque touche entrée par l'utilisateur.
Le C++ est vraiment puissant O_O !
Merci beaucoup de ton aide.
Vive les strings !
C'est idiot mais comme en C on utilise pas les strings donc je pensais qu'il fallait faire un algo un peu lourd en essayant de gérer chaque touche entrée par l'utilisateur.
Le C++ est vraiment puissant O_O !
Merci beaucoup de ton aide.