Structures C

nicolas66 Messages postés 116 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 4 janvier 2009 - 20 déc. 2003 à 19:35
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 20 déc. 2003 à 21:03
Bonsoir tlm,
j'ai un petit ennui avec la fonction C suivante :
---------------------------------------------------------
struct passwd *getpwnam (const char * name)
---------------------------------------------------------

Je l'utilise dans mon code qui est celui-ci :

---------------------------------------------------
int main()
{
struct passwd
{
char *pw_name;
char *pw_passwd;
uid_t pw_uid;
gid_t pw_gid;
char *pw_gecos;
char *pw_dir;
char *pw_shell;
};

struct passwd * lst;
lst=(struct passwd *)malloc(sizeof(struct passwd));
lst=getpwnam("root");
free(lst);

return 0;
}
---------------------------------------------------------

Ca me retourne l'erreur : ne peut convertir « passwd* » vers « main()::passwd* » dans
assignment .. Je comprends pas trop d'où ca peut venir, alors si qq1 pouvait me donner un coup de pouce, ca serait super sympa merci d'avance !!

:big) Neo [[mailto:benouse.gerbouli@caramail.com email]] [site web]

3 réponses

cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 déc. 2003 à 19:47
declare ta structure en dehors du main ;)
0
nicolas66 Messages postés 116 Date d'inscription mercredi 25 décembre 2002 Statut Membre Dernière intervention 4 janvier 2009
20 déc. 2003 à 20:05
C'est bon j'ai trouvé. En fait ya meme pas besoin de la déclarer la structure ni de faire d'allocation mémoire ;).

#include <stdio.h>
#include
#include <stdlib.h>
#include
#include
#include <sys/types.h>

int main()
{
struct passwd * lst;
lst=getpwnam("neo");
cout << lst->pw_name << endl;
cout << lst->pw_passwd << endl;
cout << lst->pw_uid << endl;
cout << lst->pw_gid << endl;
cout << lst->pw_gecos << endl;
cout << lst->pw_dir << endl;
cout << lst->pw_shell << endl;

return 0;
}

Juste une question : ya pas plus simple que d'afficher les champs de la struct un par un ? Merci.

:big) Neo [[mailto:benouse.gerbouli@caramail.com email]] [site web]
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
20 déc. 2003 à 21:03
oui, tu peut redefinir l'operateur <<

ostream& operator << (ostream& out,const struct passwd& lst)
{
out << lst.pw_name << endl;
out << lst.pw_passwd << endl;
out << lst.pw_uid << endl;
out << lst.pw_gid << endl;
out << lst.pw_gecos << endl;
out << lst.pw_dir << endl;
out << lst.pw_shell << endl;
return out;
}

> pour struct passwd * lst; tu fait cout<<*lst<<endl;
0
Rejoignez-nous