Bonsoir,
j ai note une difference de resultats pour strcmp selon l os sur lequel je me trouvais :
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 char *s1 = "125"; char *s2 = "123"; printf("%i\n", strcmp(s1, s2)); printf("%i\n", strcmp("125", "123"));
Sous mac : strcmp retourne bien une difference de 2 dans les deux cas d utilisation.
Sous linux : strcmp retournera 1 et non 2 lorsque l on cree directement les string dans les parametres.
Strcmp sous apple :
Code c : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 int strcmp(s1, s2) const char *s1, *s2; { while (*s1 == *s2++) if (*s1++ == 0) return (0); return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1)); }
L implementation GNU :
Code c : 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 int STRCMP (const char *p1, const char *p2) { const unsigned char *s1 = (const unsigned char *) p1; const unsigned char *s2 = (const unsigned char *) p2; unsigned char c1, c2; do { c1 = (unsigned char) *s1++; c2 = (unsigned char) *s2++; if (c1 == '\0') return c1 - c2; } while (c1 == c2); return c1 - c2; }
Le comportement du code reste relativement le meme dans les deux versions. Qu est ce qui cause cette difference ? Le code genere par les compilateurs ? L architecture des processeurs ? Ou me manque il simplement une notion que je n ai pas encore etudiee ?
Partager