Salut,
 
Quand on programme du "réseau" on peut utiliser la fonction gethostbyname() qui consigne des info sur le serveur sur lequel on veut se connecter dans la structure suivante:
 
Code :
 - typedef struct hostent {
 -   char FAR* h_name;
 -   char FAR  FAR** h_aliases;
 -   short h_addrtype;
 -   short h_length;
 -   char FAR  FAR** h_addr_list;
 - } HOSTENT,
 -  *PHOSTENT,
 -  FAR *LPHOSTENT;
 
  | 
 
Toutes les IP sont dans le champ h_addr_list, il y a plusieurs IP d'où le **.
En général on se préoccupe que de la première c'est a dire h_addr_list[0] et c'est elle qui m'intéresse, je voudrais l'afficher et je sais pas comment faire.
 
En faisant:
 
Code :
 - printf("IP serveur: %d.%d.%d.%d\n", stru->h_addr_list[0][0], stru->h_addr_list[0][1],\
 - stru->h_addr_list[0][2], stru->h_addr_list[0][3]);
 
  | 
 
ca foire quand un nombre de l'IP est trop grand (plus grand que 128 je crois) ca affiche à la place un résultat completement abérant, négatif parfois suivant le formatage utilisé dans printf().
Il me semble que cela vient d'une histoire de signé/non signé. Dans ce cas où ca foire, et dans ce ca seulement,
on trouve la bonne valeur en ajoutant 256:
stru->h_addr_list[0][i]+256
 
il faudrait donc pour chacun des 4 nombre de l'adresse faire le test:
stru->h_addr_list[0][0] < 0 ? ajouter 256 : ne rien changer
 
Vu comme c'est compliqué pour ce que c'est je me suis dit qu'il devait bien y avoir un autre moyen beaucoup plus simple !
 
J'ai un peu cherché sur le net, j'ai vu quelqu'un dire qu'il fallait formater comme ceci: %hhu.%hhu.%hhu.%hhu
mais ca ne marche pas.
 
Voilà si vous avez une idée ! Moi je l'avais deja fait sous UNIX et j'avais pas eu ce problème.
 
Question subsidiaire: c'est quoi FAR ? un type ? si oui, lequel ?