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 :

Problème de portabilité du programme


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut Problème de portabilité du programme
    Bonjour à tous,

    J'ai écrit un programme pour comparer deux fichiers binaires encodé en byte, double ou float.
    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
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int comparerFichiersBinairesType(char * nomf1, char * nomf2, int nbOctet, float seuil);
    int comparerFichiersBinairesTypeByte(char * nomf1, char * nomf2);
    int comparerFichiersBinairesTypeDouble(char * nomf1, char * nomf2, float seuil);
    int comparerFichiersBinairesTypeFloat(char * nomf1, char * nomf2, float seuil);
     
    int main (int argc, char * argv[]){
    	printf("%s %s %s %s\n",argv[1], argv[2],argv[3], argv[4]); 
    	comparerFichiersBinairesType(argv[1], argv[2], atoi(argv[3]), atof(argv[4]));	
    	return 0;
    }
     
    int comparerFichiersBinairesType(char * nomf1, char * nomf2, int nbOctet, float seuil){
    	if (nbOctet == 1)
    		comparerFichiersBinairesTypeByte(nomf1, nomf2); 
    	else if (nbOctet == 4)
    		comparerFichiersBinairesTypeFloat(nomf1, nomf2, seuil);
    	else
    		comparerFichiersBinairesTypeDouble(nomf1, nomf2, seuil);
    	return 0;
    }
     
    int comparerFichiersBinairesTypeByte(char * nomf1, char * nomf2){
    	FILE *fic1;
    	FILE *fic2;
    	int n1, n2, n3;
     
    	fic1 = fopen(nomf1,"rb");
    	fic2 = fopen(nomf2,"rb");
    	if( fic1 == NULL || fic2 == NULL )
    		return 0;
     
    	while( fread(&n1, 1, 1,fic1)) {
    		fread(&n2, 1, 1,fic2);
    		if (n1 != n2) {
    			// Fonction gererErreur
    			printf("%s (valeur: %d) et %s (valeur: %d)\n", nomf1, n1, nomf2, n2);
    			//system("! sh TnrMge.sh $ERR_FICHIERBINDIFF && exit $ERR_FICHIERBINDIFF");
    		} 
    	}	
    	fclose(fic1);
    	fclose(fic2);
    	return 0;
    }
     
    int comparerFichiersBinairesTypeDouble(char * nomf1, char * nomf2, float seuil){
    	FILE *fic1;
    	FILE *fic2;
    	double n1, n2;
    	float ecartInf = 1.0 - seuil, ecartSup = 1.0 + seuil;
     
    	fic1 = fopen(nomf1,"rb");
    	fic2 = fopen(nomf2,"rb");
    	if( fic1 == NULL || fic2 == NULL )
    		return 0;
     
    	while( fread(&n1, sizeof(double), 1,fic1)) {
    		fread(&n2, sizeof(double), 1,fic2);
    		if (n1 != n2) {
    			if ((n2 < n1*ecartInf) || (n2 > n1*ecartSup)){ 
    				// Fonction gererErreur
    				printf("%s (valeur: %lf) et %s (valeur: %lf)\n", nomf1, n1, nomf2, n2);
    				//system("! sh TnrMge.sh $ERR_FICHIERBINDIFF && exit $ERR_FICHIERBINDIFF");
    			}
    		}
    	}	
    	fclose(fic1);
    	fclose(fic2);
    	return 0;
    }
     
    int comparerFichiersBinairesTypeFloat(char * nomf1, char * nomf2, float seuil){
    	FILE *fic1;
    	FILE *fic2;
    	float n1, n2;
    	float ecartInf = 1.0 - seuil, ecartSup = 1.0 + seuil;
     
    	fic1 = fopen(nomf1,"rb");
    	fic2 = fopen(nomf2,"rb");
    	if( fic1 == NULL || fic2 == NULL )
    		return 0;
     
    	while( fread(&n1, sizeof(float), 1,fic1)) {
    		fread(&n2, sizeof(float), 1,fic2);
    		if (n1 != n2) {
    			if ((n2 < n1*ecartInf) || (n2 > n1*ecartSup)){ 
    				// Fonction gererErreur
    				printf("%s (valeur: %f) et %s (valeur: %f)\n", nomf1, n1, nomf2, n2);
    				//system("! sh TnrMge.sh $ERR_FICHIERBINDIFF && exit $ERR_FICHIERBINDIFF");
    			}
    		}
    	}	
    	fclose(fic1);
    	fclose(fic2);
    	return 0;
    }
    Sur ma machine, ce code fonctionne correctement (Mandriva est l'OS). Cependant, sur un autre poste ayant une autre version de Mandriva, il ne fonctionne pas.
    Pourriez vous m'aidez? J'aimerais comprendre où est le problème et le résoudre.
    Merci par avance

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par cayou Voir le message
    Sur ma machine, ce code fonctionne correctement (Mandriva est l'OS). Cependant, sur un autre poste ayant une autre version de Mandriva, il ne fonctionne pas.
    Pourriez vous m'aidez? J'aimerais comprendre où est le problème et le résoudre.
    Merci par avance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c:10: warning: unused parameter 'argc'
    main.c: In function `comparerFichiersBinairesTypeByte':
    main.c:29: warning: unused variable `n3'
    Linking console executable: console.exe
    Process terminated with status 0 (0 minutes, 2 seconds)
    0 errors, 2 warnings
    Il est suspect que argv soit utilisé et pas argc. Ca veut dire que tu ne vérifies pas le nombre de paramètres avant de les utiliser...

    n3 n'est pas utilisé. C'est normal ?

    Il faudrait donner un lien vers les fichiers binaires concernés. Ils ont été créés comment ?
    (je n'ai pas de fichiers et ça crash sévèrement... aucun contrôle de paramètres, ni d'ouverture de fichiers...)

    Au fait, c'est quoi le problème ("ça marche pas", c'est pas très précis...).

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    J'ai effectivement oublié de préciser que sur la version qui "fonctionne" j'ai été obligé de laisser la déclaration de n3.
    n3 était à la base un compteur d'erreur, que j'ai voulu supprimer. Sa suppression entrainait un mauvais comportement de mon programme, je l'ai donc laissé. Pour ce qui est de argc, je ne le vérifie pas car ce programme c est en fait appelé par un programme sh sui lui envoie le bon nombre d'arguments et des arguments valides.
    Je vais quand meme ajouté la verif au cas ou.
    Les fichiers binaires ont été créés avec ilwis.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    J'ai ajouté le test sur argc et j'ai supprimé n3
    Ca change rien.
    Ma version A fonctionne toujours: c'est à dire que je teste sur deux fichiers binaire en byte et qu'il y a pas d'erreur identiques
    et ma version B fonctionne pas: c'est à dire qu'elle n'arrive pas à lire les octets correctement et qu'elle me trouve des différences à chaque octet.

    remarque: pour n3, sur ma version A c'est le même problème. Si j'enlève la déclaration de n3 ça marche plus.

    C'est pas un problème d'allocation de mémoire?

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par cayou Voir le message
    J'ai effectivement oublié de préciser que sur la version qui "fonctionne" j'ai été obligé de laisser la déclaration de n3.
    n3 était à la base un compteur d'erreur, que j'ai voulu supprimer. Sa suppression entrainait un mauvais comportement de mon programme, je l'ai donc laissé. Pour ce qui est de argc, je ne le vérifie pas car ce programme c est en fait appelé par un programme sh sui lui envoie le bon nombre d'arguments et des arguments valides.
    Je vais quand meme ajouté la verif au cas ou.
    Les fichiers binaires ont été créés avec ilwis.
    EDIT : J'ai réparé tout le code (et réorganisé le codage, il faut apprendre à factoriser...)
    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <float.h>
    #include <math.h>
     
    static int comparerFichiersBinairesTypeByte (FILE * fic1, FILE * fic2)
    {
       int err = 0;
       int fin = 0;
     
       while (!err && !fin)
       {
          int n1 = fgetc (fic1);
          fin = n1 == EOF;
          if (!fin)
          {
             int n2 = fgetc (fic2);
             fin = n2 == EOF;
             if (!fin)
             {
                if (n1 != n2)
                {
                   err = 1;
                   printf ("ERR : F1:%d F2:%d (byte)\n", n1, n2);
                }
             }
          }
       }
       return err;
    }
     
    static int comparerFichiersBinairesTypeDouble (FILE * fic1, FILE * fic2,
                                                   double epsilon)
    {
       int err = 0;
       double n1, n2;
     
       while (!err && fread (&n1, sizeof (double), 1, fic1) == 1)
       {
          if (fread (&n2, sizeof (double), 1, fic2) == 1)
          {
             if (fabs (n2 - n1) > epsilon)
             {
                err = 1;
                printf ("ERR : F1:%g F2:%g (double)\n", n1, n2);
             }
             if (errno)
                perror ("fabs");
          }
       }
       return err;
    }
     
    static int comparerFichiersBinairesTypeFloat (FILE * fic1, FILE * fic2,
                                                  double epsilon)
    {
       int err = 0;
       float n1, n2;
     
       while (!err && fread (&n1, sizeof (float), 1, fic1))
       {
          fread (&n2, sizeof (float), 1, fic2);
          if (fabs (n2 - n1) > epsilon)
          {
             err = 1;
             printf ("ERR : F1:%g F2:%g (float)\n", n1, n2);
          }
     
          if (errno)
             perror ("fabs");
       }
       return 0;
    }
     
    static int comparerFichiersBinairesType (char *nomf1, char *nomf2,
                                             int nbOctet, double epsilon)
    {
       FILE *fic1 = fopen (nomf1, "rb");
       if (fic1 != NULL)
       {
          FILE *fic2 = fopen (nomf2, "rb");
          if (fic2 != NULL)
          {
             int err = 0;
             if (nbOctet == 1)
             {
                err = comparerFichiersBinairesTypeByte (fic1, fic2);
             }
             else if (nbOctet == 4)
             {
                err = comparerFichiersBinairesTypeFloat (fic1, fic2, epsilon);
             }
             else
             {
                err = comparerFichiersBinairesTypeDouble (fic1, fic2, epsilon);
             }
             fclose (fic2);
     
             if (err)
             {
                // Fonction gererErreur
                printf ("Erreur de comparaison entre %s et %s\n", nomf1, nomf2);
                //system("! sh TnrMge.sh $ERR_FICHIERBINDIFF && exit $ERR_FICHIERBINDIFF");
             }
             else
             {
                printf ("Les fichiers %s et %s sont identiques\n", nomf1, nomf2);
             }
          }
          else
          {
             perror (nomf2);
          }
          fclose (fic1);
       }
     
       else
       {
          perror (nomf1);
       }
     
       return 0;
    }
     
    int main (int argc, char *argv[])
    {
       if (argc > 4)
       {
          printf ("%s %s %s %s\n", argv[1], argv[2], argv[3], argv[4]);
          comparerFichiersBinairesType (argv[1], argv[2], atoi (argv[3]),
                                        atof (argv[4]));
       }
       else
       {
          puts ("erreur parametres");
       }
       return 0;
    }
    Essaye le tel quel.

    Pose des questions si tu ne comprends pas.

    Tu es bien consciente que le format binaire des données de type float et double peut changer d'une machine à l'autre et que la comparaison binaire n'est pas portable. Quand à la comparaison en valeur, elle peut aussi changer...

    Bref, si les fichiers n'ont pas été créés dans le même conditions, la comparaison peut ne pas fonctionner, même si les valeurs sont 'identique' (à epsilon près).

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    Il doit forcement y avoir une raison à ces problemes inattendus.
    J'ai essayé de réécrire plusieurs fois le meme programme.
    - En commencant par la fonction ComparerFichiersBinairesTypeByte et quand j'ai modifié mon main pour intégrer les autres fonctions j'ai eu le meme probleme: mes fichiers etaient devenus différents pour lui!!!
    - En laissant l'ossature de mon programme et en intégrant mon code progressivement. Quand j'ai inséré le while meme problème: les fichiers binaires étaient considérés comme différent:

    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
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    ima10.gr# ima102.gr# 1 1.001
    ima10.gr# (valeur: 73) et ima102.gr# (valeur: -1078939575)
    ima10.gr# (valeur: 76) et ima102.gr# (valeur: -1078939572)
    ima10.gr# (valeur: 87) et ima102.gr# (valeur: -1078939561)
    ima10.gr# (valeur: 73) et ima102.gr# (valeur: -1078939575)
    ima10.gr# (valeur: 83) et ima102.gr# (valeur: -1078939565)
    ima10.gr# (valeur: 32) et ima102.gr# (valeur: -1078939616)
    ima10.gr# (valeur: 50) et ima102.gr# (valeur: -1078939598)
    ima10.gr# (valeur: 46) et ima102.gr# (valeur: -1078939602)
    ima10.gr# (valeur: 48) et ima102.gr# (valeur: -1078939600)
    ima10.gr# (valeur: 48) et ima102.gr# (valeur: -1078939600)
    ima10.gr# (valeur: 32) et ima102.gr# (valeur: -1078939616)
    ima10.gr# (valeur: 84) et ima102.gr# (valeur: -1078939564)
    ima10.gr# (valeur: 97) et ima102.gr# (valeur: -1078939551)
    ima10.gr# (valeur: 98) et ima102.gr# (valeur: -1078939550)
    ima10.gr# (valeur: 108) et ima102.gr# (valeur: -1078939540)
    ima10.gr# (valeur: 101) et ima102.gr# (valeur: -1078939547)
    ima10.gr# (valeur: 13) et ima102.gr# (valeur: -1078939635)
    ima10.gr# (valeur: 10) et ima102.gr# (valeur: -1078939638)
    ima10.gr# (valeur: 26) et ima102.gr# (valeur: -1078939622)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 154) et ima102.gr# (valeur: -1078939494)
    ima10.gr# (valeur: 197) et ima102.gr# (valeur: -1078939451)
    ima10.gr# (valeur: 238) et ima102.gr# (valeur: -1078939410)
    ima10.gr# (valeur: 236) et ima102.gr# (valeur: -1078939412)
    ima10.gr# (valeur: 243) et ima102.gr# (valeur: -1078939405)
    ima10.gr# (valeur: 24) et ima102.gr# (valeur: -1078939624)
    ima10.gr# (valeur: 253) et ima102.gr# (valeur: -1078939395)
    ima10.gr# (valeur: 63) et ima102.gr# (valeur: -1078939585)
    ima10.gr# (valeur: 8) et ima102.gr# (valeur: -1078939640)
    ima10.gr# (valeur: 59) et ima102.gr# (valeur: -1078939589)
    ima10.gr# (valeur: 111) et ima102.gr# (valeur: -1078939537)
    ima10.gr# (valeur: 228) et ima102.gr# (valeur: -1078939420)
    ima10.gr# (valeur: 87) et ima102.gr# (valeur: -1078939561)
    ima10.gr# (valeur: 224) et ima102.gr# (valeur: -1078939424)
    ima10.gr# (valeur: 224) et ima102.gr# (valeur: -1078939424)
    ima10.gr# (valeur: 63) et ima102.gr# (valeur: -1078939585)
    ima10.gr# (valeur: 1) et ima102.gr# (valeur: -1078939647)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 1) et ima102.gr# (valeur: -1078939647)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 2) et ima102.gr# (valeur: -1078939646)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 154) et ima102.gr# (valeur: -1078939494)
    ima10.gr# (valeur: 197) et ima102.gr# (valeur: -1078939451)
    ima10.gr# (valeur: 238) et ima102.gr# (valeur: -1078939410)
    ima10.gr# (valeur: 236) et ima102.gr# (valeur: -1078939412)
    ima10.gr# (valeur: 243) et ima102.gr# (valeur: -1078939405)
    ima10.gr# (valeur: 24) et ima102.gr# (valeur: -1078939624)
    ima10.gr# (valeur: 242) et ima102.gr# (valeur: -1078939406)
    ima10.gr# (valeur: 63) et ima102.gr# (valeur: -1078939585)
    ima10.gr# (valeur: 248) et ima102.gr# (valeur: -1078939400)
    ima10.gr# (valeur: 196) et ima102.gr# (valeur: -1078939452)
    ima10.gr# (valeur: 144) et ima102.gr# (valeur: -1078939504)
    ima10.gr# (valeur: 15) et ima102.gr# (valeur: -1078939633)
    ima10.gr# (valeur: 145) et ima102.gr# (valeur: -1078939503)
    ima10.gr# (valeur: 58) et ima102.gr# (valeur: -1078939590)
    ima10.gr# (valeur: 229) et ima102.gr# (valeur: -1078939419)
    ima10.gr# (valeur: 191) et ima102.gr# (valeur: -1078939457)
    ima10.gr# (valeur: 1) et ima102.gr# (valeur: -1078939647)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 11) et ima102.gr# (valeur: -1078939637)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 2) et ima102.gr# (valeur: -1078939646)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 77) et ima102.gr# (valeur: -1078939571)
    ima10.gr# (valeur: 10) et ima102.gr# (valeur: -1078939638)
    ima10.gr# (valeur: 255) et ima102.gr# (valeur: -1078939393)
    ima10.gr# (valeur: 184) et ima102.gr# (valeur: -1078939464)
    ima10.gr# (valeur: 143) et ima102.gr# (valeur: -1078939505)
    ima10.gr# (valeur: 70) et ima102.gr# (valeur: -1078939578)
    ima10.gr# (valeur: 228) et ima102.gr# (valeur: -1078939420)
    ima10.gr# (valeur: 63) et ima102.gr# (valeur: -1078939585)
    ima10.gr# (valeur: 186) et ima102.gr# (valeur: -1078939462)
    ima10.gr# (valeur: 73) et ima102.gr# (valeur: -1078939575)
    ima10.gr# (valeur: 177) et ima102.gr# (valeur: -1078939471)
    ima10.gr# (valeur: 204) et ima102.gr# (valeur: -1078939444)
    ima10.gr# (valeur: 112) et ima102.gr# (valeur: -1078939536)
    ima10.gr# (valeur: 98) et ima102.gr# (valeur: -1078939550)
    ima10.gr# (valeur: 243) et ima102.gr# (valeur: -1078939405)
    ima10.gr# (valeur: 63) et ima102.gr# (valeur: -1078939585)
    ima10.gr# (valeur: 10) et ima102.gr# (valeur: -1078939638)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 1) et ima102.gr# (valeur: -1078939647)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 2) et ima102.gr# (valeur: -1078939646)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 46) et ima102.gr# (valeur: -1078939602)
    ima10.gr# (valeur: 91) et ima102.gr# (valeur: -1078939557)
    ima10.gr# (valeur: 15) et ima102.gr# (valeur: -1078939633)
    ima10.gr# (valeur: 112) et ima102.gr# (valeur: -1078939536)
    ima10.gr# (valeur: 4) et ima102.gr# (valeur: -1078939644)
    ima10.gr# (valeur: 151) et ima102.gr# (valeur: -1078939497)
    ima10.gr# (valeur: 171) et ima102.gr# (valeur: -1078939477)
    ima10.gr# (valeur: 191) et ima102.gr# (valeur: -1078939457)
    ima10.gr# (valeur: 96) et ima102.gr# (valeur: -1078939552)
    ima10.gr# (valeur: 110) et ima102.gr# (valeur: -1078939538)
    ima10.gr# (valeur: 82) et ima102.gr# (valeur: -1078939566)
    ima10.gr# (valeur: 172) et ima102.gr# (valeur: -1078939476)
    ima10.gr# (valeur: 20) et ima102.gr# (valeur: -1078939628)
    ima10.gr# (valeur: 63) et ima102.gr# (valeur: -1078939585)
    ima10.gr# (valeur: 149) et ima102.gr# (valeur: -1078939499)
    ima10.gr# (valeur: 63) et ima102.gr# (valeur: -1078939585)
    ima10.gr# (valeur: 10) et ima102.gr# (valeur: -1078939638)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 11) et ima102.gr# (valeur: -1078939637)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 2) et ima102.gr# (valeur: -1078939646)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    ima10.gr# (valeur: 0) et ima102.gr# (valeur: -1078939648)
    J'ai pas de ftp pour vous faire passer le binaire mais je vous montre ce qu'affiche mon programme on voit bien que les valeur de n2 sont completement fausses et impossible!!!!

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    J'ai réparé la comparaison binaire 'byte' (et réorganisé le codage, il faut apprendre à factoriser...)
    Merci beaucoup pour votre aide. C'est la première fois que j'utilise un forum pour résoudre un problème et j'avoue que c'est super. Ca fait plusieurs jours que je me debats avec mon code et vous m'avez aidé en quelques minutes c'est super. J'ai, par contre toujours pas compris, pourquoi ca se comportait aussi "bizarrement".
    Sinon, le c et moi on est pas amoureux fous alors promis, je vais faire des efforts pour la factorisation (=> Resolution de 2008)
    Merci encore.


    Bonne année à tous

  8. #8
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par cayou Voir le message
    Merci beaucoup pour votre aide. C'est la première fois que j'utilise un forum pour résoudre un problème et j'avoue que c'est super. Ca fait plusieurs jours que je me debats avec mon code et vous m'avez aidé en quelques minutes c'est super. J'ai, par contre toujours pas compris, pourquoi ca se comportait aussi "bizarrement".
    J'ai modifié mon post. Essaye le code corrigé.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    EDIT : J'ai réparé tout le code (et réorganisé le codage, il faut apprendre à factoriser...)

    Tu es bien conscient que le format binaire des données de type float et double peut changer d'une machine à l'autre et que la comparaison binaire n'est pas portable. Quand à la comparaison en valeur, elle peut aussi changer...
    Effectivement, j'en suis consciente, le but du jeu c'est d'effectuer des tests de non régression entre deux versions d'un outil. En sortie il y a de l'ascii ou du binaire. Pour le binaire, l'outil produit et produira toujours trois type de fichiers byte (1 octet), float (4 octets) et double (8 octets). Ca me fait penser que je devrais entrer en dur la taille dans le fread plutot que de faire un sizeof qui lui pourra varier d'une machine à une autre.

    Citation Envoyé par Emmanuel Delahaye Voir le message
    Bref, si les fichiers n'ont pas été créés dans le même conditions, la comparaison peut ne pas fonctionner, même si les valeurs sont 'identiques' (à epsilon près).
    Je considère que oui dans mon cas.

  10. #10
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    cayou
    Il doit forcement y avoir une raison à ces problemes inattendus...
    Pour info, la raison est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	int n1, n2, n3;
    ...
    	while( fread(&n1, 1, 1,fic1)) {
    		fread(&n2, 1, 1,fic2);
    		if (n1 != n2) ....
    Comme tu ne lis qu'un byte, tu ne modifies qu'un byte de n1 et n2. Les autres bytes restent ce qu'ils étaient à savoir... n'importe quoi (dans ton cas, 000000?? et BFB0B0??). Les valeurs dans n1 et n2 sont différentes, elles ont seulement un byte en commun (celui d'adresse &n1 et &n2 qui est dans ton cas le byte de poids faible)!
    Si tu lis 49 (hexa) l'un vaut 00000049 et l'autre BFB0B049

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par diogene Voir le message
    cayou Pour info, la raison est ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	int n1, n2, n3;
    ...
    	while( fread(&n1, 1, 1,fic1)) {
    		fread(&n2, 1, 1,fic2);
    		if (n1 != n2) ....
    Oui, j'ai corrigé ça dans mon code. (lecture par fgetc())

  12. #12
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Oui, j'ai corrigé ça dans mon code. (lecture par fgetc())
    J'avais vu, c'est pourquoi je faisais référence au code original pour expliquer la source des problèmes "inattendus"

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 7
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    J'ai modifié mon post. Essaye le code corrigé.
    Il marche bien il manquait juste la libraire #include <errno.h> pour qu'il fonctionne

    Citation Envoyé par diogene Voir le message
    cayou Comme tu ne lis qu'un byte, tu ne modifies qu'un byte de n1 et n2. Les autres bytes restent ce qu'ils étaient à savoir... n'importe quoi (dans ton cas, 000000?? et BFB0B0??). Les valeurs dans n1 et n2 sont différentes, elles ont seulement un byte en commun (celui d'adresse &n1 et &n2 qui est dans ton cas le byte de poids faible)!
    Si tu lis 49 (hexa) l'un vaut 00000049 et l'autre BFB0B049
    Merci pour l'explication. Je crois que je me serai casser la tete bien longtemps avant de comprendre le probleme vu que ca marchait par moment et pas a d autres. J'avais effectivement mal saisi la philosophie du fread et du fgetc.

    Merci encore

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par cayou Voir le message
    Il marche bien il manquait juste la libraire #include <errno.h> pour qu'il fonctionne
    Oui, tout à fait. Dans ma version de C, il devait déjà être inclu dans un autre header (donc je n'ai rien vu), mais ce n'est pas standard. Ca m'a echappé, désolé.

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 52
    Par défaut
    Je ne comprend pas la façon d'utiliser errno:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (errno)
      perror...
    Celui ci gardant la dernière erreur rencontré, cette condition sera toujours vrai dès qu'une erreur survient n'importe ou dans le code(Ajoutons par exemple l'ouverture d'un mauvais fichier dans le main)

  16. #16
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par totaliou Voir le message
    Je ne comprend pas la façon d'utiliser errno:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if (errno)
      perror...
    Celui ci gardant la dernière erreur rencontré, cette condition sera toujours vrai dès qu'une erreur survient n'importe ou dans le code(Ajoutons par exemple l'ouverture d'un mauvais fichier dans le main)
    Oui. Et ?

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 52
    Par défaut
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Oui. Et ?
    Affichera tout le temps l'erreur précedente(errno n'étant jamais set à 0)

    Le code posté n'autorise l'erreur d'aucune fonction nul part??
    J'ai ajouté simplement un fopen foireux au début du main, on ne quitte pas forcement tout le temps un programme à la première erreur rencontré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main (int argc, char *argv[])
    {
      fopen("ImNotafile", "rb");
       if (argc > 4)
       {
          printf ("%s %s %s %s\n", argv[1], argv[2], argv[3], argv[4]);
          comparerFichiersBinairesType (argv[1], argv[2], atoi (argv[3]),
                                        atof (argv[4]));
    Voici la sortie:
    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
     
    test.c test.c 30 0.1
    fabs: No such file or directory
    fabs: Illegal seek
    fabs: Illegal seek
    fabs: Illegal seek
    fabs: Illegal seek
    fabs: Illegal seek
    .
    . (400 erreurs)
    .
    fabs: Illegal seek
    fabs: Illegal seek
    fabs: Illegal seek
    fabs: Illegal seek
    fabs: Illegal seek
    fabs: Illegal seek
    Les fichiers test.c et test.c sont identiques
    C'est rigide à quelconque ajouts de codes, ce qui est plutôt genant non?

    edit:
    Je précise que toutes les erreurs affichee proviennent de l'unique appelle raté à fopen.

  18. #18
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par totaliou Voir le message
    Affichera tout le temps l'erreur précedente(errno n'étant jamais set à 0)

    Le code posté n'autorise l'erreur d'aucune fonction nul part??
    J'ai ajouté simplement un fopen foireux au début du main, on ne quitte pas forcement tout le temps un programme à la première erreur rencontré.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int main (int argc, char *argv[])
    {
      fopen("ImNotafile", "rb");
       if (argc > 4)
       {
          printf ("%s %s %s %s\n", argv[1], argv[2], argv[3], argv[4]);
          comparerFichiersBinairesType (argv[1], argv[2], atoi (argv[3]),
                                        atof (argv[4]));
    Je précise que toutes les erreurs affichee proviennent de l'unique appelle raté à fopen.
    Bah, ce nest pas mon code. Quand j'ai une erreur de fopen(), je quitte. Evidemment, si on code avec ses pieds, il ne faut pas s'attendre à un résultat correct.

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 98
    Par défaut
    Ou alors faut être souple

  20. #20
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par pmier Voir le message
    Ou alors faut être souple
    Ou s'appeler Sithandra...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème de portabilité d'un programme avec tkinter et matplotlib
    Par rafoim dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 13/11/2013, 11h52
  2. Problème d'execution du programme
    Par black is beautiful dans le forum Windows
    Réponses: 1
    Dernier message: 31/03/2006, 21h24
  3. Problème de portabilité vers Mac OS?
    Par doudoustephane dans le forum C++Builder
    Réponses: 8
    Dernier message: 16/08/2005, 07h53
  4. problème de Portabilité (erreur 1407)
    Par cgMorpheus dans le forum MFC
    Réponses: 3
    Dernier message: 06/03/2005, 21h00
  5. Problème de portabilité nmake / make
    Par Dozer dans le forum Systèmes de compilation
    Réponses: 3
    Dernier message: 25/01/2005, 22h38

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