porównywanie dwóch łańcuchów daje dziwne wyniki

0

mam taki oto kod:

 #include<stdio.h>
  2 
  3 int strcmp(char*, char*);
  4 
  5 int main()
  6 {   
  7     char *s = "4programmers", *t = "4programmer";
  8     
  9     printf("%d\n", strcmp(s, t));
 10     return 0;
 11 }   
 12 
 13 int strcmp(char *s, char *t)
 14 {
 15     for( ; *s == *t; s++, t++)
 16         if(*s == '\0')
 17             return 0;
 18     return *s - *t;
 19 }  

wynik:

115

What the Christ? Mój własny kompilator mnie nie słucha.

0

Powinien chyba dac 1 a nie 115. Nie za bardzo wiem o co kaman.

0

Czemu 1 a nie 115?

0

Przecież widać, że po prostu bezmyślnie skopiował ten kod, pewnie praca domowa.

0
PS napisał(a):

Przecież widać, że po prostu bezmyślnie skopiował ten kod, pewnie praca domowa.

LOL. K&R, str. 106, Rozdział 5. Pozdro

0

Odejmujesz przecieŻ znak 's' od znaku NULL. Czego chcesz innego, aniżeli 115 ('s' w ASCII)?

0
Macron napisał(a):

Odejmujesz przecieŻ znak 's' od znaku NULL. Czego chcesz innego, aniżeli 115 ('s' w ASCII)?

cytat z książki: "[...] strcmp(s,t), which compares the character strings s and t, and returns negative, zero or positive if s is lexicogrphically less than, equal to, or greater than t. The value is obtained by subtracting the characters at the first position where s and t disagree".

To ja nie czytam ze zrozumieniem czy stwórca języka C miał zły dzień?

0

Positive to większy od zera, negative mniejszy, nie ma słowa o konkretnej wartości... Nie czytasz ze zrozumieniem.

0

Okej dzięki za pomoc. Wracam do pisania GNU/Linux.

1 użytkowników online, w tym zalogowanych: 0, gości: 1