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
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.

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
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;
}
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.
0
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
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)
0
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.
0
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
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++
0