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 ?