Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1959 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Tout mais pas gets!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tout mais pas gets!

n°1515987
liouan
Posté le 17-02-2007 à 15:38:11  profilanswer
 

Bonjour tout le monde,
 
j'ai un problème pour lire une chaïne de caractères au clavier. J'explique:
j'ai un projet dans lequel je dois implémenter une fonction qui permet de faire une recherche de disque par artiste.
l'utilisateur rentre donc le nom de l'artiste et le programme affiche la liste de ses disques
 
pour l'instant, je fais:
 
char* art=malloc(100*sizeof(char));
printf("\nnom de l'artiste à rechercher???\n" );
  while(getchar()=='\n');
  gets(art);
printf("\nresultat:%s",art);
 
 
maintenant, un aperçu de mon terminal:
 
 
nom de l'artiste à rechercher???
The Cure
 
resultat:he Cure
 
vous remarquerez que la première lettre de la chaine a été sucrée, ce qui m'embête un peu à vrai dire...
Alors, j'ai cherché un peu, et j'ai vu beaucoup de messages disant que la fonction gets est buggée et qu'il ne faut pas l'utiliser
d'ailleurs, quand je compile, mon terminal me met un warning:
 
liouan@liouan-laptop:~/P2_Denoyelle/code_linux$ make
gcc -c -g -Wall -pedantic main_etu.c
gcc -o main_etu cddb.o list.o main_etu.o
main_etu.o : Dans la fonction "menu":/home/liouan/P2_Denoyelle/code_linux/main_etu.c:175: AVERTISSEMENT: the `gets' function is dangerous and should not be used.
 
Alors je veux bien qu'elle "should not be used" mais dans ce cas, je fais quoi? vous une autre fonction qui fait la même chose? (j'ai cherché mais n'ai pas trouvé. De plus, je précise que mon code est en C, pas en C++)

mood
Publicité
Posté le 17-02-2007 à 15:38:11  profilanswer
 

n°1515992
Trap D
Posté le 17-02-2007 à 16:00:55  profilanswer
 

tu n'as pas trouvé fgets(buf, sizeof buf, stdin) ?
D'autre part réfléchis un peu pourquoi ton code sucre la première lettre de la saisie.


Message édité par Trap D le 17-02-2007 à 16:02:18
n°1515997
liouan
Posté le 17-02-2007 à 16:18:03  profilanswer
 

oui, c'est bon, j'ai trouvé, comme un gros c**. Pour vider le buffer, j'ai fait un
  while(getchar()=='\n');  
au lieu de
   while(getchar()!='\n');  
ça marche maintenant
et sinon, non, je ne connaissais pas fgets

n°1516004
Taz
bisounours-codeur
Posté le 17-02-2007 à 17:14:58  profilanswer
 

et surtout getchar() != EOF :o

n°1516012
Sve@r
Posté le 17-02-2007 à 19:17:15  profilanswer
 

liouan a écrit :

pour l'instant, je fais:

Code :
  1. char* art=malloc(100*sizeof(char));




 
Et si tu faisais plutôt :

Code :
  1. char art[100];


???


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1516023
ngkreator
Posté le 17-02-2007 à 20:59:32  profilanswer
 

Sve@r a écrit :

Et si tu faisais plutôt :

Code :
  1. char art[100];


???


D'ailleur si on fait:
 

Code :
  1. char art[100];
  2. art[50];


 
On obtient bien une allocation de 50 avec la libération des 50 autres?

n°1516033
LePhasme
Les Belges domineront le monde
Posté le 17-02-2007 à 21:40:07  profilanswer
 

Non, ca veut juste dire que tu prends l'élément en position 50 de ton tableau.

n°1516075
Emmanuel D​elahaye
C is a sharp tool
Posté le 18-02-2007 à 01:20:10  profilanswer
 

ngkreator a écrit :


Code :
  1. char art[100];
  2. art[50];


On obtient bien une allocation de 50 avec la libération des 50 autres?


Je crois qu'avant de te couper un doigt ou une oreille, tu devrais apprendre à manier le C avec précaution...

 

http://web.tri-isys.com/QonoS/Parts/Files/dagger.gif

  

Message cité 1 fois
Message édité par Emmanuel Delahaye le 27-02-2008 à 01:56:45

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1516081
ngkreator
Posté le 18-02-2007 à 08:41:15  profilanswer
 

Emmanuel Delahaye a écrit :

Je crois qu'avant de te couper une doigt ou une oreille, tu devrais apprendre à manier le C avec précaution...
 
http://web.tri-isys.com/QonoS/Parts/Files/dagger.gif


Quand j'y repense c'était idiot [:cupra]

n°1516093
Sve@r
Posté le 18-02-2007 à 10:43:21  profilanswer
 

ngkreator a écrit :

D'ailleur si on fait:
 

Code :
  1. char art[100];
  2. art[50];


 
On obtient bien une allocation de 50 avec la libération des 50 autres?


[:rofl]


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
mood
Publicité
Posté le 18-02-2007 à 10:43:21  profilanswer
 

n°1516097
ngkreator
Posté le 18-02-2007 à 11:03:47  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Tout mais pas gets!

 

Sujets relatifs
Un problème dans une page: écriture dans table sql - getsPourquoi gets pose t'il un problème?
Longueur maximale d'une entrée clavier sous DOS via scanf/gets ?gcc -> the gets function is dangerous and should not be used
[C] fonction gets() qui ne s'exécute pas dans un switch()[C] probleme avec gets
[C] Mode graphique sous DOS, gets ?[DirectDraw] Une sorte de gets()
[C++] gets() non bloquant 
Plus de sujets relatifs à : Tout mais pas gets!


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)