Chaîne de caractère

Chaîne de caractère - C - Programmation

Marsh Posté le 01-06-2015 à 02:21:35    

Bonsoir tout le monde j'aurais besoin de votre aide
J'aimerais traiter N chaîne de caractère avec les pointeurs (sachant que le N est donner par l'utilisateur)
Voici ce que j'ai fait :(bien-sûr sans oublier les biblio)
int i,N;
printf(''donner N\n'');
scanf("%d",&N);
char *phrase[N]; char aide(200);
for(i=0;i<N;i++){
printf(" veuillez saisir la phrase %d\n" );
gets(aide);
phrase[i]=(int*)malloc(strlen(aide)*sizeof(char)+1);
strcpy(phrase[i],aide);
}
Mais j'arrive pas à lire la 1ère phrase il commence directement de la deuxième  

Reply

Marsh Posté le 01-06-2015 à 02:21:35   

Reply

Marsh Posté le 01-06-2015 à 21:26:09    

Donne donc ton code réel, parce que là avec du char aide(200); ça ne compile même pas! Et configure ton compilateur pour qu'il affiche la maximum de warnings! (sous GCC rajouter le paramètre -Wall)

Reply

Marsh Posté le 01-06-2015 à 21:35:08    

Citation :

Mais j'arrive pas à lire la 1ère phrase il commence directement de la deuxième  


Tu veux dire écrire la 1ere phrase? Effectivement le programme affiche directement  

Code :
  1. veuillez saisir la phrase 0
  2. veuillez saisir la phrase 1
  3. (en attente d'entrée)


C'est probablement du au fait que scanf() laisse dans le buffer d'entrée le saut de ligne qui vient de l'appui sur entrée après avoir tappé N. Faut vider le buffer. On voit souvent fflush(stdin) mais c'est FAUX car comportement non déterminé. À la place on peut utiliser ceci

Code :
  1. fseek(stdin, 0, SEEK_END);

mais il y a peut-être mieux...
 
De manière générale: N c'est pas très parlant, peut-être plutôt genre nbphrases? Faut aussi vérifier ce que retourne malloc(). Et puis si on entre des lettres pour N le programme plante. A revoir mais les histoires d'entrée-sortie je laisse ma place à quelqu'un d'autre...  
 
(Je fais exprès de ne pas donner de code complet corrigé...)


Message édité par rat de combat le 01-06-2015 à 21:35:57
Reply

Marsh Posté le 01-06-2015 à 21:40:54    

Ah oui, ton gets(aide); il ne limite pas le nombre de caractères, si on en entre trop --> buffer overflow :-(

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed