fgets et strcat

fgets et strcat - C - Programmation

Marsh Posté le 28-07-2005 à 15:35:20    

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]?

Reply

Marsh Posté le 28-07-2005 à 15:35:20   

Reply

Marsh Posté le 28-07-2005 à 15:37:04    

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

Reply

Marsh Posté le 28-07-2005 à 15:51:25    

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

Reply

Marsh Posté le 28-07-2005 à 15:55:45    

ben tu utilises mal feof

Reply

Marsh Posté le 28-07-2005 à 15:58:58    

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

Reply

Marsh Posté le 28-07-2005 à 16:00:08    

de la daube quoi

Reply

Marsh Posté le 28-07-2005 à 16:00:34    

Taz a écrit :

de la daube quoi


c'est quoi la bonne facon alors?

Reply

Marsh Posté le 28-07-2005 à 16:11:56    

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
Reply

Marsh Posté le 28-07-2005 à 16:17:08    

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

Reply

Marsh Posté le 28-07-2005 à 16:20:48    

regarde les types ...

Reply

Marsh Posté le 28-07-2005 à 16:20:48   

Reply

Marsh Posté le 28-07-2005 à 16:29:02    

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

Reply

Marsh Posté le 28-07-2005 à 17:25:02    

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

Marsh Posté le 28-07-2005 à 17:28:57    

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

Marsh Posté le 01-08-2005 à 12:42:59    


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

Reply

Marsh Posté le 01-08-2005 à 12:49:21    

euh...
man getpwnam ?

Reply

Marsh Posté le 01-08-2005 à 13:13:31    

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

Reply

Marsh Posté le 01-08-2005 à 14:53:10    

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

Sujets relatifs:

Leave a Replay

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