IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Aide pour corriger des erreurs


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Aide pour corriger des erreurs
    Bonjour,

    à la compilation de ce programme, j'ai ces erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    couple.c: In function `Couple':
    couple.c:95: error: incompatible type for argument 1 of `strcpy'
    couple.c:105: error: incompatible type for argument 1 of `strcpy'
    couple.c:120: error: incompatible types in assignment
    couple.c:121: error: incompatible types in assignment
    couple.c: In function `main':
    couple.c:138: error: invalid operands to binary !=
    couple.c:138: error: invalid operands to binary !=
    couple.c:139: warning: format argument is not a pointer (arg 2)
    couple.c:139: warning: format argument is not a pointer (arg 3)
    Merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
     
    #define F "voisin"
     
    //Fonction qui avant tant qu'elle ne lit pas '\n' ou EOF 
    void purge(FILE *fp)
    {
      int c;
      while ((c = fgetc(fp)) != '\n' && c != EOF)
        {
        }
    }
     
    //Fonction qui remplace '\n' par 0
    void clean (char *s, FILE *fp)
    {
      /* Cherche ... */
      char *p = strchr (s, '\n');
      if (p != NULL)
        {
          /* ... supprime */
          *p = 0;
        }
      else
        {
          purge (fp);
        }
    }
     
    typedef struct{
      unsigned char x[4];
    }t_ip;
     
    typedef struct {
      t_ip ip1;
      t_ip ip2;
    } t_couple;
     
     
     
     
    //Fonction qui rcupre les couples de valeur en lisant un fichier
    t_couple *Couple(FILE *fp)
    {
      int nb = 0                //nb element du tableau 
        ,size = 5;             //taille du tableau
      t_couple *tabCouple;     // tableau qui recupere les couples
      tabCouple = (t_couple*)malloc (size * sizeof(t_couple));
      if(tabCouple == NULL)
        {
          perror("erreur allocation\n");
          return NULL;
        }
     
      if (fp == NULL)
        {
          perror(F);
          return NULL;
        }
      char line[BUFSIZ];
     
      while(fgets(line, sizeof line, fp) != NULL)
        {
          clean(line, fp);  // on supprime '\n'
          char *p = strtok(line,",");      //p contient la 1ere IP
          if (p != NULL)
    	{
    	  char *p1 = strtok(NULL,"\0");  //p1 contient la 2e IP
     
    	  if(nb == size) //si tableau trop petit
    	    {
    	      size += 16;
     
    	      //on augmente le taille
    	      tabCouple = realloc(tabCouple, size * sizeof(t_couple));
    	      if (tabCouple == NULL)
    		{
    		  perror("erreur allocation\n");
    		  free(tabCouple); tabCouple = NULL;
    		  return tabCouple;
    		}
    	    }
    	  /*
    	  //on insere la 1ere valeur du couple
    	  tabCouple[nb].ip1 = malloc((strlen(p)+1) * sizeof(t_couple));
    	  if (tabCouple[nb].ip1 == NULL)
    	  {
    	      perror("erreur allocation\n");
    	      free(tabCouple); tabCouple = NULL;
    	      return tabCouple;
    	      }*/
    	  strcpy(tabCouple[nb].ip1,p);
    	  /*
    	  //on insere la 2d valeur du couple
    	  tabCouple[nb].ip2 = malloc((strlen(p1)+1) * sizeof(t_couple));
    	  if (tabCouple[nb].ip2 == NULL)
    	    {
    	      perror("erreur allocation\n");
    	      free(tabCouple); tabCouple = NULL;
    	      return tabCouple;
    	      }*/
    	  strcpy(tabCouple[nb].ip2,p1);
     
    	  nb++;// on incremente le compteur nb element reel
    	}
          else
    	{
    	  printf ("format error\n");
    	  break;
    	}
          // on ferme le fichier
          fclose (fp), fp = NULL;
        }
      assert (fp == NULL);
     
      //on met  NULL pour avoir un marqueur de fin de tableau
        tabCouple[nb].ip1 = NULL;
        tabCouple[nb].ip2 = NULL;
     
      return tabCouple;
    }
     
     
    int main(void)
    {
      int i;                             //Indice de boucle
      FILE * file = fopen("voisin","r");  //Fichier  lire
      t_couple *tabCouple = Couple(file);
      if(tabCouple == NULL)
        {
          perror("erreur\n");
          exit(1);
        }
      //Parcours du tableau de couple
      for(i=0; tabCouple[i].ip1!=NULL && tabCouple[i].ip2!=NULL; i++)
        printf("Couple : %s et %s\n", tabCouple[i].ip1, tabCouple[i].ip2);
     
      //fin du pgm
      return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    tabCouple[i].ip1.x

    PS: En langage C, NULL, c'est pour les pointeurs. ip1 est une structure, alors c'est quoi ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=0; tabCouple[i].ip1!=NULL && tabCouple[i].ip2!=NULL; i++)
    ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Citation Envoyé par Premium
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef struct{
      unsigned char x[4];
    }t_ip;
    Heu c'est quoi ce type ? unsigned char !!!

    une adresse IP c'est 16 charactères '123'+'.'+'456'+'.'+'789'+'.'+'000'+'\0' au max

    dans ton cas '1'+'2'+'3'+'\0'

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par gnto
    Heu c'est quoi ce type ? unsigned char !!!
    Tu plaisantes la?

    unsigned char, c'est pour dire que tu utilises un char non signé, sa valeur ira donc de 0 à 255.

    A l'inverse d'un char qui va de -127 à 127.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par gnto
    une adresse IP c'est 16 charactères '123'+'.'+'456'+'.'+'789'+'.'+'000'+'\0' au max

    dans ton cas '1'+'2'+'3'+'\0'
    Tu as deja vu une adresse ip avec un numéro > 255?
    0.0.0.0
    255.255.255.255

    Donc l'adresse tiens bien dans un tableau de 4 octets non signés.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  6. #6
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Citation Envoyé par Skyrunner
    Tu plaisantes la?

    unsigned char, c'est pour dire que tu utilises un char non signé, sa valeur ira donc de 0 à 255.

    A l'inverse d'un char qui va de -127 à 127.
    Atta je te le dis textuellement un caractère non signé Y' a pas un truc qui te choque ?

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    En clair, c'est une adresse IP codée en numérique (sur 4 octets quoi) dans ce cas, les strcpy() n'ont rien à faire ici!
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Médinoc
    tabCouple[i].ip1.x

    PS: En langage C, NULL, c'est pour les pointeurs. ip1 est une structure, alors c'est quoi ce
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for(i=0; tabCouple[i].ip1!=NULL && tabCouple[i].ip2!=NULL; i++)
    ?
    J'ai mis ça pour avoir un marqueur de fin, ça doit donner ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static t_couple tabCouple[]={
        {{127, 0, 0, 1}, {192, 168, 0, 2}},	
        {{127, 0, 0, 1}, {192, 168, 0, 4}},	
        {{192, 168, 0, 2}, {192, 168, 0, 3}},
        {{192, 168, 0, 2}, {192, 168, 0, 4}},
        {{192, 168, 0, 3}, {192, 168, 0, 4}},
        {{192, 168, 0, 4}, {192, 168, 0, 5}},	
        {{192, 168, 0, 5}, {192, 168, 0, 2}},		
        {{192, 168, 0, 6}, {192, 168, 0, 5}},		
        {{0, 0, 0, 0}, {0, 0, 0, 0}}
      };
    Les derniers couples doit être nul

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par gnto
    Atta je te le dis textuellement un caractère non signé Y' a pas un truc qui te choque ?
    Un char n'est qu'un octet, tu peux placer ce que bon te semble dedans (tant que tu ne debordes pas).

    Mais il est vrai que d'utiliser un int aurait ete plus pratique. Notamment pour afficher l'adresse ip.
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    c'est nul, mais ce n'est pas NULL.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  11. #11
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Médinoc
    En clair, c'est une adresse IP codée en numérique (sur 4 octets quoi) dans ce cas, les strcpy() n'ont rien à faire ici!
    Comment on copie la valeur sans faire strcpy?

  12. #12
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    strcpy() ne copie pas des valeurs, strcpy() copie des chaînes.

    memcpy() peut être intéressant, par contre.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    heu d'accord j'aurais mis un entier limité a 8 bits

  14. #14
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Médinoc
    c'est nul, mais ce n'est pas NULL.
    Comment je fais alors ?
    De plus est ce que je peux directement couplé les 2 ips pour les mettre à nul sans faire ip=0 et ip2=0

  15. #15
    Membre éprouvé Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Points : 1 210
    Points
    1 210
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct _ip ip;
    struct _ip
    {
         int nb1:8;
         int nb2:8;
         int nb3:8;
         int nb4:8;
    };
    c'est certe moins esthétique.

    ou alors plus drole encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <stdint.h>
     
    typedef struct _ip ip;
    struct _ip
    {
         uint8_t nb1;
         uint8_t nb2;
         uint8_t nb3;
         uint8_t nb4;
    };

  16. #16
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    J'ai modifié le code avec memcpy mais j'ai toujours des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    couple.c: In function `Couple':
    couple.c:95: error: incompatible type for argument 1 of `memcpy'
    couple.c:105: error: incompatible type for argument 1 of `memcpy'
    couple.c:120: error: parse error before '{' token
    couple.c:121: error: parse error before '{' token
    couple.c: In function `main':
    couple.c:138: error: parse error before '{' token
    couple.c:138: error: parse error before ')' token
    Je ne comprends pas les erreurs, ce sont bien des chaines de caracteres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
     
    #define F "voisin"
     
    //Fonction qui avant tant qu'elle ne lit pas '\n' ou EOF 
    void purge(FILE *fp)
    {
      int c;
      while ((c = fgetc(fp)) != '\n' && c != EOF)
        {
        }
    }
     
    //Fonction qui remplace '\n' par 0
    void clean (char *s, FILE *fp)
    {
      /* Cherche ... */
      char *p = strchr (s, '\n');
      if (p != NULL)
        {
          /* ... supprime */
          *p = 0;
        }
      else
        {
          purge (fp);
        }
    }
     
    typedef struct{
      unsigned char x[4];
    }t_ip;
     
    typedef struct {
      t_ip ip1;
      t_ip ip2;
    } t_couple;
     
     
     
     
    //Fonction qui rcupre les couples de valeur en lisant un fichier
    t_couple *Couple(FILE *fp)
    {
      int nb = 0                //nb element du tableau 
        ,size = 5;             //taille du tableau
      t_couple *tabCouple;     // tableau qui recupere les couples
      tabCouple = (t_couple*)malloc (size * sizeof(t_couple));
      if(tabCouple == NULL)
        {
          perror("erreur allocation\n");
          return NULL;
        }
     
      if (fp == NULL)
        {
          perror(F);
          return NULL;
        }
      char line[BUFSIZ];
     
      while(fgets(line, sizeof line, fp) != NULL)
        {
          clean(line, fp);  // on supprime '\n'
          char *p = strtok(line,",");      //p contient la 1ere IP
          if (p != NULL)
    	{
    	  char *p1 = strtok(NULL,"\0");  //p1 contient la 2e IP
     
    	  if(nb == size) //si tableau trop petit
    	    {
    	      size += 16;
     
    	      //on augmente le taille
    	      tabCouple = realloc(tabCouple, size * sizeof(t_couple));
    	      if (tabCouple == NULL)
    		{
    		  perror("erreur allocation\n");
    		  free(tabCouple); tabCouple = NULL;
    		  return tabCouple;
    		}
    	    }
    	  /*
    	  //on insere la 1ere valeur du couple
    	  tabCouple[nb].ip1 = malloc((strlen(p)+1) * sizeof(t_couple));
    	  if (tabCouple[nb].ip1 == NULL)
    	  {
    	      perror("erreur allocation\n");
    	      free(tabCouple); tabCouple = NULL;
    	      return tabCouple;
    	      }*/
    	  memcpy (tabCouple[nb].ip1, p, strlen(p)+1);
    	  /*
    	  //on insere la 2d valeur du couple
    	  tabCouple[nb].ip2 = malloc((strlen(p1)+1) * sizeof(t_couple));
    	  if (tabCouple[nb].ip2 == NULL)
    	    {
    	    perror("erreur allocation\n");
    	      free(tabCouple); tabCouple = NULL;
    	      return tabCouple;
    	      }*/
    	  memcpy (tabCouple[nb].ip2, p1, strlen(p1)+1);
     
    	  nb++;// on incremente le compteur nb element reel
    	}
          else
    	{
    	  printf ("format error\n");
    	  break;
    	}
          // on ferme le fichier
          fclose (fp), fp = NULL;
        }
      assert (fp == NULL);
     
      //on met  NULL pour avoir un marqueur de fin de tableau
        tabCouple[nb].ip1 = {'0','0','0','0'};
        tabCouple[nb].ip2 = {'0','0','0','0'};
     
      return tabCouple;
    }
     
     
    int main(void)
    {
      int i;                             //Indice de boucle
      FILE * file = fopen("voisin","r");  //Fichier  lire
      t_couple *tabCouple = Couple(file);
      if(tabCouple == NULL)
        {
          perror("erreur\n");
          exit(1);
        }
      //Parcours du tableau de couple
      for(i=0; tabCouple[i].ip1!={'0','0','0','0'} && tabCouple[i].ip2!={'0','0','0','0'}; i++)
        printf("Couple : %s et %s\n", tabCouple[i].ip1, tabCouple[i].ip2);
     
      //fin du pgm
      return 0;
    }

  17. #17
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    gnto: Et ça ne sert à rien, et en plus c'est signé.

    Premium: Garde tes unsigned char, pour l'instant.

    Pour la comparaison, tu peux toujours faire un union:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    union u_ip {
      unsigned char ipBytes[4];//premier octet = premier octet
      unsigned long ipBigEndian;//(à convertir via htonl/ntohl au besoin)
    };
    Et tu renonces à tes memcpy(), tu fais tes copies directement avec les unsigned long.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  18. #18
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par Médinoc
    gnto: Et ça ne sert à rien, et en plus c'est signé.

    Premium: Garde tes unsigned char, pour l'instant.

    Pour la comparaison, tu peux toujours faire un union:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    union u_ip {
      unsigned char ipBytes[4];//premier octet = premier octet
      unsigned long ipBigEndian;//(à convertir via htonl/ntohl au besoin)
    };
    Et tu renonces à tes memcpy(), tu fais tes copies directement avec les unsigned long.
    Salut,

    en faite, il faut impérativement que j'utilise les structures que j'ai mis dans le code car ça sert dans d'autres codes.
    Si je modifies mes structures dans ce code, je devrais le faire dans tous les autres or il me reste peu de temps pour finir mon pgm.

    Si vous pouviez m'aider avec les structures en place

    Merci

  19. #19
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    long ipBigEndian = *(long const *)(tabCouple[i].ip1.x);
    Avec cette instruction, lors de la lecture, l'entier long ipBigEndian contiendra la même chose que si on était passé par un union.

    Et pour écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *(long *)(tabCouple[i].ip1.x) = ipBigEndian;
    Donc avec ça, tu peux travailler sur les addresses IP avec des long, tu peux convertir au format "hôte" pour comparer deux addresses IP avec des fonctions comme ntohl(), etc.

    Et le tout, sans modifier ta structure.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  20. #20
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Pourquoi cette ligne ci est fausse :
    tabCouple[nb].ip1.x = {'0','0','0','0'};

    je met bien 4 caractere dans x qui est un unsigned char x[4]

Discussions similaires

  1. [Débutant] demande d'aide pour corriger 2 erreurs en vb.net
    Par coleoptere dans le forum VB.NET
    Réponses: 6
    Dernier message: 14/04/2013, 23h33
  2. Cherche aide pour corriger erreur au démarrage
    Par odb000856 dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/09/2010, 14h38
  3. [CR8.5] Aide pour lier des etats
    Par Silvinho42 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 28/04/2005, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo