C++: controler la taille d'un cin
Résolu/Fermé
Teemsis
-
24 juin 2011 à 15:58
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 24 juin 2011 à 17:56
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 - 24 juin 2011 à 17:56
3 réponses
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
24 juin 2011 à 16:25
24 juin 2011 à 16:25
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.
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
24 juin 2011 à 17:52
24 juin 2011 à 17:52
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.
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 019
24 juin 2011 à 17:56
24 juin 2011 à 17:56
Tu ne peux pas utiliser de string en C pour la bonne raison que c'est une classe, donc de la programmation objet, d'où la différence entre C et C++