Accueil > Forum > > > > problème chaines de caractères
problème chaines de caractères
jeudi 11 septembre 2003 à 11:52:03 |
problème chaines de caractères

tintin72
|
Bonjour J'aimerai avoir un petit éclaircissement sur les chaines de caractères. Voici un programme tout bête... char prenom[100]; cout<<"Taper votre prénom"<<endl; gets(prenom); cout<<"Bonjour "<<prenom<<endl; Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine. Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])? Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop? Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ? Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ? Un autre truc que je comprend pas avec le code suivant.. char nom[50]; char prenom[50]; char telephone[50]; cout<<"Entrez le nom: \n"<<endl; gets(nom); cout<<nom<<" "<<endl; cout<<"Entrez le prénom: \n"<<endl; gets(prenom); cout<<prenom<<endl; cout<<"Entrez le n° de téléphone: \n"<<endl; gets(telephone); cout<<telephone<<endl; Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch, int code; cout<<"entrez un code"<<endl; cin>>code; switch(code){ case 1: //le code break; case2: //etc..... il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde. Quelqu'un saurait il pourquoi ? Merci !
|
|
jeudi 11 septembre 2003 à 13:02:51 |
Re : problème chaines de caractères

Anacr0x
|
Bon, les 96 autres octect sont de l'espace réservé pour la variable, si c'est pas initialisé, ca peut etre n'importe quoi Effectivement, c du gachi si tu les utilise pas, reduit la taille si té sur ke la variable n'ira jamais au dessus !
moyen dinamique : a ma connaissance, il n'en existe aps, calcule toi meme le nombre de caractere a utilisé, c le mieu (pour les longue chaine, tu peu t'aidé d'un strlen() )
Pour ton exemple, peut etre faut-il que tu vide le buffer de cin, je sais pas trop @+
------------------------------- Réponse au message : -------------------------------
> Bonjour > J'aimerai avoir un petit éclaircissement sur les chaines de caractères. > Voici un programme tout bête... > > char prenom[100]; > > cout<<"Taper votre prénom"<<endl; > gets(prenom); > cout<<"Bonjour "<<prenom<<endl; > > Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine. > Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])? > Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop? > Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ? > > Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ? > > > Un autre truc que je comprend pas avec le code suivant.. > > char nom[50]; > char prenom[50]; > char telephone[50]; > > cout<<"Entrez le nom: \n"<<endl; > gets(nom); > cout<<nom<<" "<<endl; > cout<<"Entrez le prénom: \n"<<endl; > gets(prenom); > cout<<prenom<<endl; > cout<<"Entrez le n° de téléphone: \n"<<endl; > gets(telephone); > cout<<telephone<<endl; > > Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch, > > int code; > cout<<"entrez un code"<<endl; > cin>>code; > > switch(code){ > case 1: > //le code > break; > > case2: //etc..... > > il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde. > Quelqu'un saurait il pourquoi ? > > Merci !
|
|
jeudi 11 septembre 2003 à 13:38:40 |
Re : problème chaines de caractères

vecchio56
|
La librairie STL fournit le modèle basic_string qui permet de résourdre ce type de problèmes, tu n'as pas a t'occuper de la mémoire; elle est automatiquement allouée et désallouée quand c'est nécéssaire. Par contre, ca se fait un peu au détriment de l'efficacité.
------------------------------- Réponse au message : -------------------------------
> Bon, les 96 autres octect sont de l'espace réservé pour la variable, si c'est pas initialisé, ca peut etre n'importe quoi > Effectivement, c du gachi si tu les utilise pas, reduit la taille si té sur ke la variable n'ira jamais au dessus ! > > moyen dinamique : a ma connaissance, il n'en existe aps, calcule toi meme le nombre de caractere a utilisé, c le mieu (pour les longue chaine, tu peu t'aidé d'un strlen() ) > > Pour ton exemple, peut etre faut-il que tu vide le buffer de cin, je sais pas trop > @+ > > ------------------------------- > Réponse au message : > ------------------------------- > > > Bonjour > > J'aimerai avoir un petit éclaircissement sur les chaines de caractères. > > Voici un programme tout bête... > > > > char prenom[100]; > > > > cout<<"Taper votre prénom"<<endl; > > gets(prenom); > > cout<<"Bonjour "<<prenom<<endl; > > > > Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine. > > Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])? > > Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop? > > Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ? > > > > Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ? > > > > > > Un autre truc que je comprend pas avec le code suivant.. > > > > char nom[50]; > > char prenom[50]; > > char telephone[50]; > > > > cout<<"Entrez le nom: \n"<<endl; > > gets(nom); > > cout<<nom<<" "<<endl; > > cout<<"Entrez le prénom: \n"<<endl; > > gets(prenom); > > cout<<prenom<<endl; > > cout<<"Entrez le n° de téléphone: \n"<<endl; > > gets(telephone); > > cout<<telephone<<endl; > > > > Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch, > > > > int code; > > cout<<"entrez un code"<<endl; > > cin>>code; > > > > switch(code){ > > case 1: > > //le code > > break; > > > > case2: //etc..... > > > > il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde. > > Quelqu'un saurait il pourquoi ? > > > > Merci ! >
|
|
jeudi 11 septembre 2003 à 13:47:04 |
Re : problème chaines de caractères

BruNews
|
Tu peux meme dire 'BEAUCOUP' de perte d'efficacite. Et puis pour un debutant, c'est pas a conseiller sinon il n'apprendra jamais a coder correctement. BruNews, ciao...
------------------------------- Réponse au message : -------------------------------
> La librairie STL fournit le modèle basic_string > qui permet de résourdre ce type de problèmes, tu n'as pas a t'occuper de la mémoire; elle est automatiquement allouée et désallouée quand c'est nécéssaire. Par contre, ca se fait un peu au détriment de l'efficacité. > > > ------------------------------- > Réponse au message : > ------------------------------- > > > Bon, les 96 autres octect sont de l'espace réservé pour la variable, si c'est pas initialisé, ca peut etre n'importe quoi > > Effectivement, c du gachi si tu les utilise pas, reduit la taille si té sur ke la variable n'ira jamais au dessus ! > > > > moyen dinamique : a ma connaissance, il n'en existe aps, calcule toi meme le nombre de caractere a utilisé, c le mieu (pour les longue chaine, tu peu t'aidé d'un strlen() ) > > > > Pour ton exemple, peut etre faut-il que tu vide le buffer de cin, je sais pas trop > > @+ > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > Bonjour > > > J'aimerai avoir un petit éclaircissement sur les chaines de caractères. > > > Voici un programme tout bête... > > > > > > char prenom[100]; > > > > > > cout<<"Taper votre prénom"<<endl; > > > gets(prenom); > > > cout<<"Bonjour "<<prenom<<endl; > > > > > > Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine. > > > Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])? > > > Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop? > > > Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ? > > > > > > Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ? > > > > > > > > > Un autre truc que je comprend pas avec le code suivant.. > > > > > > char nom[50]; > > > char prenom[50]; > > > char telephone[50]; > > > > > > cout<<"Entrez le nom: \n"<<endl; > > > gets(nom); > > > cout<<nom<<" "<<endl; > > > cout<<"Entrez le prénom: \n"<<endl; > > > gets(prenom); > > > cout<<prenom<<endl; > > > cout<<"Entrez le n° de téléphone: \n"<<endl; > > > gets(telephone); > > > cout<<telephone<<endl; > > > > > > Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch, > > > > > > int code; > > > cout<<"entrez un code"<<endl; > > > cin>>code; > > > > > > switch(code){ > > > case 1: > > > //le code > > > break; > > > > > > case2: //etc..... > > > > > > il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde. > > > Quelqu'un saurait il pourquoi ? > > > > > > Merci ! > > >
|
|
jeudi 11 septembre 2003 à 15:52:17 |
Re : problème chaines de caractères

vecchio56
|
Il y en a qui préfèrent la fiabilité à l'efficacité, surtout que dans le cas présent ca me semble être la meilleure solution.
------------------------------- Réponse au message : -------------------------------
> Tu peux meme dire 'BEAUCOUP' de perte d'efficacite. > Et puis pour un debutant, c'est pas a conseiller sinon il n'apprendra jamais a coder correctement. > BruNews, ciao... > > > ------------------------------- > Réponse au message : > ------------------------------- > > > La librairie STL fournit le modèle basic_string > > qui permet de résourdre ce type de problèmes, tu n'as pas a t'occuper de la mémoire; elle est automatiquement allouée et désallouée quand c'est nécéssaire. Par contre, ca se fait un peu au détriment de l'efficacité. > > > > > > ------------------------------- > > Réponse au message : > > ------------------------------- > > > > > Bon, les 96 autres octect sont de l'espace réservé pour la variable, si c'est pas initialisé, ca peut etre n'importe quoi > > > Effectivement, c du gachi si tu les utilise pas, reduit la taille si té sur ke la variable n'ira jamais au dessus ! > > > > > > moyen dinamique : a ma connaissance, il n'en existe aps, calcule toi meme le nombre de caractere a utilisé, c le mieu (pour les longue chaine, tu peu t'aidé d'un strlen() ) > > > > > > Pour ton exemple, peut etre faut-il que tu vide le buffer de cin, je sais pas trop > > > @+ > > > > > > ------------------------------- > > > Réponse au message : > > > ------------------------------- > > > > > > > Bonjour > > > > J'aimerai avoir un petit éclaircissement sur les chaines de caractères. > > > > Voici un programme tout bête... > > > > > > > > char prenom[100]; > > > > > > > > cout<<"Taper votre prénom"<<endl; > > > > gets(prenom); > > > > cout<<"Bonjour "<<prenom<<endl; > > > > > > > > Supposont que l'utilisateur s'appelle Paul. Dans ce cas le '\0' final se trouve à prenom[4] et indique la fin de la chaine. > > > > Qu'advient il des 96 autres octets qui restent (puisque la déclaration est char prenom[100])? > > > > Est ce que le compilateur considère que la chaine 'prenom' contient désormais 5 caractères et désaloue les 96 octets en trop? > > > > Ou est ce que ces 96 octets restent en mémoire, et dans ce cas c'est de la mémoire gaspillée ? > > > > > > > > Existe il un moyen (dynamique ?) pour qu'une chaine contienne juste le nombre d'octets necessaires ? > > > > > > > > > > > > Un autre truc que je comprend pas avec le code suivant.. > > > > > > > > char nom[50]; > > > > char prenom[50]; > > > > char telephone[50]; > > > > > > > > cout<<"Entrez le nom: \n"<<endl; > > > > gets(nom); > > > > cout<<nom<<" "<<endl; > > > > cout<<"Entrez le prénom: \n"<<endl; > > > > gets(prenom); > > > > cout<<prenom<<endl; > > > > cout<<"Entrez le n° de téléphone: \n"<<endl; > > > > gets(telephone); > > > > cout<<telephone<<endl; > > > > > > > > Comme ça, ce code marche parfaitement, mais si je l'inclue dans un switch, > > > > > > > > int code; > > > > cout<<"entrez un code"<<endl; > > > > cin>>code; > > > > > > > > switch(code){ > > > > case 1: > > > > //le code > > > > break; > > > > > > > > case2: //etc..... > > > > > > > > il zappe la 1ere entrée (cout<<"Entrez le nom: etc...) et passe directement à la seconde. > > > > Quelqu'un saurait il pourquoi ? > > > > > > > > Merci ! > > > > > >
|
|
Cette discussion est classée dans : problème, code, chaines, caractères, cout
Répondre à ce message
Sujets en rapport avec ce message
Problème avec mes floatant [ par raviel ]
Bonjour Je vous expose mon problème l'utilisateur peut rentrer 2 floatant (a et b) et additionnant les 2 pour former le résultat (c) et je souhaite e
problème avec le backtracking (sudoku) [ par anoubest ]
Bonjour tt le monde, g a écrire un code pour résoudre un sudoku. on suppose ke la grille en entrée est un tableau de 9*9 chiffres entre 0 et 9 (0 pr l
problème d'accent [ par titi4659 ]
Bonjour,j'ai un problème avec des accents en C++.J'ai une chaine de caractère que je voudrai vérifier.Je souhaiterai savoir si celle ci contient ou no
QUESTION DLL OU FICHIER EXTERNE ? [ par lectpe ]
Bonjour, J'ai réalisé une application permettant à l'utilisateur d'en changer la langue (français, anglais, espagnol...).Les chaines de caractères cor
Problème avec les chaînes de caractères [ par raviel ]
bonjour j'ai un soucis depuis quelque temps c'est que j'aimerais enregistrer une chaîne de caractère comportant même des espaces dans un fichier .txt
Problème segmentation [ par s2pawn ]
Bonjour je travail sur un jeu d'echecs en c++ variante alice, et je rencontre un probleme de segmentation avec le pion, la vérification du mouvement
problème d'éritage [ par panthere007 ]
Salut, Bon je vais essayer d'être clair mai avec l'héritage c'est pas facile précision ce code est programmer sous geany et compiler avec g++ excuser
tri alphabétique ultra rapide de chaines de caractères de longueur variable [ par mslider ]
-- Bonjour, je sais que c'est un forum dédié au C mais je vais parler de pascal. En effet je connais bien ce langage et je l'ai utilisé pour trier a
Problème compilation Unicode [ par djelangelo ]
Bonjour, Je viens de me lancer dans la programmation C++ et dans les wxWidgets sous code::blocks [^^happy6]. En utilisant un petit tutorial d'initia
problème de compilation [ par boualiasma ]
Bonjour, J'ai un programme codé en c sous Microsoft Visual C++ 6.0 qui compile et s'éxecute bien. J'ai essayé de compiler ce programme avec Dev-C++
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|