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

  FORUM HardWare.fr
  Programmation
  C

  fgets et strcat

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

fgets et strcat

n°1163265
burgergold
5$? va chez l'diable!
Posté le 28-07-2005 à 15:35:20  profilanswer
 

je dois vérifier dans un fichier /etc/passwd si un userid existe. je fais la lecture avec fgets, et ensuite je concatene dans une variable chaque caractere jusqu'à ce que j'ai atteint un ":" ou la limite de caractere pour un userid
 
le probleme c'est que je ne semble pas pouvoir faire de strcat à partir d'un caractere de ma ligne récupéré par fgets
 

Code :
  1. int name_exist(const char *userid)
  2. {
  3.   FILE *pFile;
  4.   char ligne[80];
  5.   char pw_name[LOGIN_NAME_MAX] = "";
  6.   int found = 0;
  7.   pFile = fopen("/etc/passwd", "r" );
  8.   if (pFile)
  9.   {
  10.     while (! feof(pFile) && ! found)
  11.     {
  12.       int i = 0;
  13.       fgets(ligne,sizeof ligne,pFile);
  14.       while (ligne[i] != ':' && i <= LOGIN_NAME_MAX)
  15.       {
  16.         strcat(pw_name,(unsigned char *)ligne[i]);
  17.         i++;
  18.       }
  19.       printf("%s\n",pw_name);
  20.       if (strcmp(pw_name,userid) == 0)
  21.       {
  22.         found = 1;
  23.       }
  24.       else
  25.       {
  26.         strcpy(pw_name,"" );
  27.       }
  28.     }
  29.     fclose(pFile);
  30.   }
  31.   return found;
  32. }


 
si je remplace  
strcat(pw_name,(unsigned char *)ligne[i]);
par
strcat(pw_name,"a" );
j'ai bien des "a" affiché selon la longueur du userid
 
quel est le problème avec ligne[i]?

mood
Publicité
Posté le 28-07-2005 à 15:35:20  profilanswer
 

n°1163271
Taz
bisounours-codeur
Posté le 28-07-2005 à 15:37:04  profilanswer
 

while (! feof(pFile) && ! found)
 
 
nan mais merde ...

n°1163335
burgergold
5$? va chez l'diable!
Posté le 28-07-2005 à 15:51:25  profilanswer
 

1) c'est quoi le probleme avec la condition?
2) c'est pas la question
3) on t'aime quand meme taz :D

n°1163357
Taz
bisounours-codeur
Posté le 28-07-2005 à 15:55:45  profilanswer
 

ben tu utilises mal feof

n°1163373
burgergold
5$? va chez l'diable!
Posté le 28-07-2005 à 15:58:58  profilanswer
 

j'ai simplement pris l'exemple de cet url
http://www.cplusplus.com/ref/cstdio/feof.html
(avec fgets au lieu de fgetc)

n°1163375
Taz
bisounours-codeur
Posté le 28-07-2005 à 16:00:08  profilanswer
 

de la daube quoi

n°1163377
burgergold
5$? va chez l'diable!
Posté le 28-07-2005 à 16:00:34  profilanswer
 

Taz a écrit :

de la daube quoi


c'est quoi la bonne facon alors?

n°1163421
Profil sup​primé
Posté le 28-07-2005 à 16:11:56  answer
 

burgergold a écrit :

c'est quoi la bonne facon alors?


 
Avoir des bonnes références : K&R, manpages, FAQ de fr.comp.lang.c. Et surtout éviter de coder à partir de conseils donnés sur le net, que ce soit sur une page web aussi sérieuse qu'elle puisse paraître ou sur un forum.
 
Du coup un simple coup d'oeil dans le K&R ou man fgets t'indique que fgets renvoie NULL en cas d'erreur ou de fin de fichier. Quant à feof, elle sert à diagnostiquer a posteriori la cause du renvoie de NULL de fgets.


Message édité par Profil supprimé le 28-07-2005 à 16:12:53
n°1163436
burgergold
5$? va chez l'diable!
Posté le 28-07-2005 à 16:17:08  profilanswer
 

compris pour ce point
 
retour à la question initiale, pourquoi je peux pas concaténer ligne[i] à mon pw_name?

n°1163451
Taz
bisounours-codeur
Posté le 28-07-2005 à 16:20:48  profilanswer
 

regarde les types ...

mood
Publicité
Posté le 28-07-2005 à 16:20:48  profilanswer
 

n°1163487
burgergold
5$? va chez l'diable!
Posté le 28-07-2005 à 16:29:02  profilanswer
 

c'est ok si au lieu de faire un strcat je fais
pw_name[i] = ligne[i];
 
? en tout cas le résultat est le bon

n°1163673
Emmanuel D​elahaye
C is a sharp tool
Posté le 28-07-2005 à 17:25:02  profilanswer
 

burgergold a écrit :



    while (! feof(pFile) && ! found)
    {
      int i = 0;
 
      fgets(ligne,sizeof ligne,pFile);




feof() ne fait pas ce que tu crois. Il faut tester le retour de la fonction de lecture (ici, fgets())
 
http://mapage.noos.fr/emdel/notes.htm#fichiers


---------------
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°1163681
Emmanuel D​elahaye
C is a sharp tool
Posté le 28-07-2005 à 17:28:57  profilanswer
 

burgergold a écrit :

c'est ok si au lieu de faire un strcat je fais
pw_name[i] = ligne[i];
 
? en tout cas le résultat est le bon


Ok.


---------------
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°1166649
retrox
Posté le 01-08-2005 à 12:42:59  profilanswer
 


du coup, on peut fermer la section Programmation de HFR :wahoo:

n°1166658
mcjoedassi​n
Posté le 01-08-2005 à 12:49:21  profilanswer
 

euh...
man getpwnam ?

n°1166675
burgergold
5$? va chez l'diable!
Posté le 01-08-2005 à 13:13:31  profilanswer
 

mcjoedassin a écrit :

euh...
man getpwnam ?


 
peut pas
 
on utilise un système d'authentification DCE. Lorsqu'on utilise la fonctione getpwnam, ca va chercher dans ce système là en plus de /etc/passwd

n°1166801
Emmanuel D​elahaye
C is a sharp tool
Posté le 01-08-2005 à 14:53:10  profilanswer
 

retrox a écrit :

du coup, on peut fermer la section Programmation de HFR :wahoo:


Je pense que ce qu'a voulu dire alerim, c'est que les conseils données doivent être vérifiés et testés et non pris comme parole divine... Enfin, j'espère...


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

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

  fgets et strcat

 

Sujets relatifs
Probleme fgetsProbleme avec fgets
fgets est ignoré, comment faire une saisie robuste ?Quelles différences entre fread() et fgets() ?
Ya pas mieux qu'une suite de strcat ?[c] problème de fgets --> bus error core dumped
De l'inutilité de la valeur de retour de strcat/strcpy[C] pb avec fgets
Probleme de retour a la ligne avec fgets( )...fgets
Plus de sujets relatifs à : fgets et strcat


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR