[c] Problème gethostname
Flo
-
assassin -
assassin -
Bonsoir ! Je débute en C (autant dire que j'ai encore de sérieuses lacunes, mais que je m'accroche tant bien que mal), et je rencontre un problème avc ce code, trouvé sur le net.
Je le compile sous Dev C++ et j'obtiens l'erreur suivante : "implicit declaration of function `int gethostname(...)'"
J'ai donc fait des recherches sur la fonction gethostname, mais je vois pas d'ou vient l'erreur.
Si qqn pouvait donc m'éclaircir, ou me filer un bout de code qui fonctionne permettant d'obtenir le nom de la machine, ça serait bien sympa :)
Merci d'avance, bonne soirée
Flo
#include <stdio.h> #include <unistd.h> /* pour gethostname */ #define max_nom 32 int main() { char nom[max_nom]; gethostname(nom, max_nom); printf("Ma machine s'appelle %s\n",nom); return 0; }
Je le compile sous Dev C++ et j'obtiens l'erreur suivante : "implicit declaration of function `int gethostname(...)'"
J'ai donc fait des recherches sur la fonction gethostname, mais je vois pas d'ou vient l'erreur.
Si qqn pouvait donc m'éclaircir, ou me filer un bout de code qui fonctionne permettant d'obtenir le nom de la machine, ça serait bien sympa :)
Merci d'avance, bonne soirée
Flo
11 réponses
Le probleme peut se trouver dans les parametres de cette fonction, normalement elle doit etre definie comme ceci :
gethostname(char *name, size_t namelen);
L'erreur se trouve (peut etre...)au niveau des types des variables que tu passes en parametres.
Sachant qu'un char [n] (comme tu as fait) et char*, ce n'est pas exactement la meme chose. C'est peut etre ca le probleme.
gethostname(char *name, size_t namelen);
L'erreur se trouve (peut etre...)au niveau des types des variables que tu passes en parametres.
Sachant qu'un char [n] (comme tu as fait) et char*, ce n'est pas exactement la meme chose. C'est peut etre ca le probleme.
Merci pour vos réponses !
Carkiasis > merci, j'ai essayé de bidouiller un peu, mais bon pignoufe comme je suis j'arrive bien évidemment a rien.
Mes expérimentations en sont là :
Ca compile, mais quand j'exécute y se passe rien :)
lami20j > hé hé, c'est bon signe que ça marche sous fedora, mais je suis sous win :(
Merci
Carkiasis > merci, j'ai essayé de bidouiller un peu, mais bon pignoufe comme je suis j'arrive bien évidemment a rien.
Mes expérimentations en sont là :
#include <stdio.h> #include <unistd.h> int main() { char *name; int gethostname(char *name, size_t namelen); printf("Ma machine s'appelle %s\n",*name); return 0; }
Ca compile, mais quand j'exécute y se passe rien :)
lami20j > hé hé, c'est bon signe que ça marche sous fedora, mais je suis sous win :(
Merci
bonjour
j'ai bien un code que je compile avec devc++ mais il me faut utiliser winsock2.h pour utiliser gethostname. et puis en plus ca me donne pas le nom de ma machine lol. mais si tu le veux je te le donne.
a +
j'ai bien un code que je compile avec devc++ mais il me faut utiliser winsock2.h pour utiliser gethostname. et puis en plus ca me donne pas le nom de ma machine lol. mais si tu le veux je te le donne.
a +
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Flo : au sujet du 3e message : quand "il se passe rien", tu as pas une fenêtre dos qui s'affiche fugitivement? Dans ce cas c'est tout à fait compréhensible. Ton code est (il me semble) correct. Seulement tu demandes à ton processeur de t'afficher le nom de ta machine puis de fermer le programme tout de suite, c'est à dire (dans le cas le plus lent) quelques ms après l'affichage. Autant dire que même avec des yeux de lynx, tu auras du mal à voir le résultat! Ce que tu dois faire, c'est lui demander d'attendre une action de ta part avant de fermer la fenêtre. Par exemple, en ajoutant getchar() (je te cite ça "de tête", donc vérifie si ça marche pas) à la fin de ton programme, il attendra que tu appuies sur entrée pour fermer la fenêtre, et tu auras le temps de lire :-)
Pour faire une pause simple en C, il faut utiliser l'instruction system("pause");
Il me semble qu'elle est definie dans le header "stdlib.h", à inclure donc.
Il me semble qu'elle est definie dans le header "stdlib.h", à inclure donc.
Merci pour vos réponses :]
tu as pas une fenêtre dos qui s'affiche fugitivement? --> Si si, elle s'affiche et reste ouverte, mais rien n'apparait
J'ai tenté en mettant une pause, mais le résultat est le même, la fenetre s'ouvre, reste a l'écran, mais reste noire :(
Je commence a désespérer !
tu as pas une fenêtre dos qui s'affiche fugitivement? --> Si si, elle s'affiche et reste ouverte, mais rien n'apparait
J'ai tenté en mettant une pause, mais le résultat est le même, la fenetre s'ouvre, reste a l'écran, mais reste noire :(
#include <stdio.h> #include <unistd.h> #include <stdlib.h> int main() { char *name; int gethostname(char *name, size_t namelen); printf("Ma machine s'appelle %s\n",*name); system("pause"); return 0; }
Je commence a désespérer !
désole je n'ai pas bien regardé mon code.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#define TAILLE_NOM 20
int main()
{
int r;
char *name;
if ((name = (char *) malloc(TAILLE_NOM)) == NULL) {
perror("probleme avec le malloc");
exit(1);
}
if ((r = gethostname(name,(size_t) TAILLE_NOM)) == -1) {
perror("probleme avec gethostname");
exit(1);
}
printf("Ma machine s'appelle %s\n", name);
return 0;
}
la g test le code et c bon voi pour les bibliotheque il y en a trop a toi de faire le tri.(j'avai une erreur que etait du a un mauvai usage de la commande gcc et je croye que c'etait les biblio)
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#define TAILLE_NOM 20
int main()
{
int r;
char *name;
if ((name = (char *) malloc(TAILLE_NOM)) == NULL) {
perror("probleme avec le malloc");
exit(1);
}
if ((r = gethostname(name,(size_t) TAILLE_NOM)) == -1) {
perror("probleme avec gethostname");
exit(1);
}
printf("Ma machine s'appelle %s\n", name);
return 0;
}
la g test le code et c bon voi pour les bibliotheque il y en a trop a toi de faire le tri.(j'avai une erreur que etait du a un mauvai usage de la commande gcc et je croye que c'etait les biblio)
Pour moi, ces deux lignes ne sont pas correctes
Pour la premiere ligne, ce que tu ecrit c'est une declaration de fonction et non pas l'appel à la fonction en elle meme (dites moi si je me trompe...)
Un truc plus correct serai ce que j'ai mis quelques post avant, meme s'il me mets une erreur de compilation, c'est en tout cas plus proche de la vérité.
Pour la deuxieme c'est
et non pas *name.
J'ai beau avoir pas mal d'experience en C, ce gethostname est bien bizarre... Un pro à la rescousse ??
int gethostname(char *name, size_t namelen); printf("Ma machine s'appelle %s\n",*name);
Pour la premiere ligne, ce que tu ecrit c'est une declaration de fonction et non pas l'appel à la fonction en elle meme (dites moi si je me trompe...)
Un truc plus correct serai ce que j'ai mis quelques post avant, meme s'il me mets une erreur de compilation, c'est en tout cas plus proche de la vérité.
Pour la deuxieme c'est
printf("Ma machine s'appelle %s\n",name);
et non pas *name.
J'ai beau avoir pas mal d'experience en C, ce gethostname est bien bizarre... Un pro à la rescousse ??
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#define TAILLE_NOM 20
int main()
{
int r;
char *name;
if ((name = (char *) malloc(TAILLE_NOM)) == NULL) {
perror("probleme avec le malloc");
exit(1);
}
if ((r = gethostname(name,(size_t) TAILLE_NOM)) == -1) {
perror("probleme avec gethostname");
exit(1);
}
printf("Ma machine s'appelle %s\n", name);
return 0;
}
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netdb.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#define TAILLE_NOM 20
int main()
{
int r;
char *name;
if ((name = (char *) malloc(TAILLE_NOM)) == NULL) {
perror("probleme avec le malloc");
exit(1);
}
if ((r = gethostname(name,(size_t) TAILLE_NOM)) == -1) {
perror("probleme avec gethostname");
exit(1);
}
printf("Ma machine s'appelle %s\n", name);
return 0;
}