Sinon autre problème, a priori simple mais je ne m'en sors pas.
j'utilise les 2 structures suivantes :
/* STRUCTURES */
typedef struct ip_address{
    u_char byte1;
    u_char byte2;
    u_char byte3;
    u_char byte4;
}ip_address;
 
typedef struct ip_header{
    u_char  ver_ihl;        // Version (4 bits) + Internet header length (4 bits)
    u_char  tos;            // Type of service  
    u_short tlen;           // Total length  
    u_short identification; // Identification
    u_short flags_fo;       // Flags (3 bits) + Fragment offset (13 bits)
    u_char  ttl;            // Time to live
    u_char  proto;          // Protocol
    u_short crc;            // Header checksum
 ip_address  saddr;      // Source address
    ip_address  daddr;      // Destination address
    u_int   op_pad;         // Option + Padding
}ip_header;
 
Dans une fonction je declare :
> ip_header *ih
 
et j'accède au premier champ de l'ip de la sorte :  
> ih->saddr.byte4,
 
Jusque là ok  
  
 
Maintenant je doisconcatener tous ces champs ip en une chaine de caractère unique.
 
je déclare donc "char * ipadress;" qui servira a recevoir la chaine ip complete, et la fonction strcat.
> strcat(ipadress,ih->saddr.byte4);
 
Lorsque je compile j'ai logiquement l'erreur
 
warning C4047: 'function' : 'const char *' differs in levels of indirection from 'unsigned char '
 
strcat attends en parametre : (char *,const char *)
j'ai : (char *,unsigned char)
 
Le truc c'est que j'ai beau caster le second argument dans tous les sens, (notemment en char *), le programme plante lamentablement lors de l'execution.
 
Saurais tu me dire comment je pourrai caster le second argument ?
 
PS: quand je veux afficher les infos "ih->saddr.byte1" , "ih->saddr.byte2", etc ... j'utilise un %d dans mon printf et non un %c ou %s (sinon plantage), ca me parait étrange aussi.
 
Message édité par Sagoth le 17-08-2004 à 14:39:45