Recuperer une chaine de caractere sur le clavier

nightclub Messages postés 8 Date d'inscription samedi 28 mai 2005 Statut Membre Dernière intervention 25 août 2005 - 24 août 2005 à 11:55
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 - 25 août 2005 à 22:21
deja bonjour a tous !

(qqpart je suis sur que cette question existe sur le forum mais j'ai
pas trouvé :s ! j'ai pas fait toute les pages non plus :s ! alros
si la reponse existe deja ailleur rediriger moi svp :) !!



moi mon probleme c'est que j'ai une erreur que je n'explique pas !!

je vois pas d'ou elle sors ..

dans mon code j'ai ca

char* q;

..

scanf("%s",q);

printf("%s",q);



bonle printf sert surtout de test c'est pas le code réel

normalement la variable q sera apssé en parametre dans une fonction de recherche avec un strcmp

mais deja rien que ca si je lui donne "life for rent" (sans les guillemets) il me sort la segmentation fault !



si qqun sait d'ou ca vient :s:s !!



merci a tous !

15 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
24 août 2005 à 12:21
char *q ne pointe sur rien du tout, il faut allouer de la memoire au lieu d'ecrire n'importe ou (ce qui provoque un segfault).
char *q ===>> char q[128]; (par exemple).

+2(p - n)
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 août 2005 à 12:23
Je vais pas répondre a ta question volontairement.

C'est quoi le type de "q" à ton avis ? Combien d'octet prend t-il en mémoire ?

Et donc tu vois pas le problème ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 août 2005 à 16:04
luhtor, tu as mis trop longtemps a ne pas répondre :)
Mais un pointeur prens toujours la même taille en mémoire, qu'il pointe vers quelque chose ou pas
0
nightclub Messages postés 8 Date d'inscription samedi 28 mai 2005 Statut Membre Dernière intervention 25 août 2005
24 août 2005 à 16:16
euuuhhh ... !

moi par contre je me sens plus neophite que jamais avec vos histoires .. :s

chuis désolé les gars mais je crois que j'ai pas bien saisie l'histoire que voulais me faire comprendre luthor ..

et celle de alexman je vois pas pk on met un tableau la ou je n'en ai pas besoin ..

j'ai juste une chaine de caractere avec des espaces qui va arriver sur l'entrée standard

et je voudrais la recuperer pour apres la traiter l'ideal serait de la stocker (pour moi) dans un char* ...



voila merci bien quand meme pour la rapidité !

:)

c'est toujours appreciable ... !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 août 2005 à 17:37
Si, tu as besoin d'un tableau. Si tu lis un cours (ce qui semblerait plutot logique pour apprendre un langage), ca m'étonnerais que tu voies une variable non initialisée passée par valeur. Or c'est ce que tu fais avec ton pointeur.
Si tu ne comprends pas le problème, tu dois reprendre tout à zéro parce que ce genre de choses est important à comprendre.
Quand tu tapes ton message, il devra être quelque part en mémoire. Tu utilises donc un tableau
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
24 août 2005 à 17:55
Oue vecchio, je voulais lui faire prendre conscience que stocker
quelque chose dans "q" ou à "q", n'a aucun sens. Encore que la
variation <à "q"> pourrait en avoir si la mémoire avait été
alloué.



nightclub > faut revoir les pointeurs :) et les chars ^^.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
24 août 2005 à 18:14
revoir... ou peut être voir pour commencer!
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
24 août 2005 à 18:23
Je sais que l'on vois ca dans beaucoup de livres mais scanf est à
evité, surtout pour la saisie d'une chaine (risque d'overflow). Il faut utiliser fgets.
0
nightclub Messages postés 8 Date d'inscription samedi 28 mai 2005 Statut Membre Dernière intervention 25 août 2005
24 août 2005 à 19:42
putain les gars !!

heureusement que vous etes la .. je viens de comprendre :) !

apres avoir re et re et encore rererelu vos reponses...

j'ai compris qu'un pointeur ne peut evidement pas stocker une chaine !!

faut vraiment etre con pour penser ca !! ^^

... no comment ...

pour garder un minimum d'honneur .. :s je me tairais sur mes etudes de peur d'en effrayer plus d'un ..!

merci encore !

si j'ai un soucis je sais ou demander maintenant ;)!
0
nightclub Messages postés 8 Date d'inscription samedi 28 mai 2005 Statut Membre Dernière intervention 25 août 2005
25 août 2005 à 14:28
euhm ..

je crois que je vais revenir pour vous embeter un peu :s !

en fait j'ai compris l'erreur .. :s

mais je vois pas la solution .. car du coup j'ai allouer un tableau de char

et j'ai un pointeur qui pointe dessus

du coup je peux demander au scanf de mettre la chaine en entrée dedans ..

malheureusement il ne prend pas les espaces et ne veut pas l'utiliser en tant que telle par la suite !



le fond du probleme c'est de recuperer une chaine completement
aleatoire du clavier par un utilisateur et de la comparer avec une
autre siotée dans une bdd.

et a part le scanf je connais pas d'autre trucs :s!



si vous avez un indice ou une piste a explorer



merci bien !
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 1
25 août 2005 à 16:49
fgets() cité plus haut.

+2(p - n)
0
nightclub Messages postés 8 Date d'inscription samedi 28 mai 2005 Statut Membre Dernière intervention 25 août 2005
25 août 2005 à 20:45
mais pourtant c'est marqué partout comment utiliser fgets avec un fichier !!

et ca je le fais deja ailleur ..

mais comment recuperer l'entrée du clavier ...



un peu de code serait le bienvenu .. :s



merci !
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
25 août 2005 à 20:53
Tu mets stdin comme fichier, et c'est comme si tu utilisais gets()
Tu peux donc utiliser gets dans ton cas
0
nightclub Messages postés 8 Date d'inscription samedi 28 mai 2005 Statut Membre Dernière intervention 25 août 2005
25 août 2005 à 22:03
pour fgets .... il attend pas que le clavier rentre quelque chose .. :s!

faut faire une sorte de pause ..? :s

je connais pas bien ces fonctions ... et le bouquin que j'ai les developpes surtout avec les fichiers :s !!



a++
0
steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
25 août 2005 à 22:21
stdin est un fichier ouvert en lecture sur l'entrée standard on va
dire. L'entrée standard est associée au clavier (généralement, peut
etre redirigée).



char q[200];

fgets( q, sizeof q, stdin );
0
Rejoignez-nous