008
19.04.2005, 00:09 Uhr
Pablo
Supertux (Operator)
|
Zitat von ao: |
@tunis: Eine Standard-konforme strcmp-Implementierung gibt nach meinem Infostand nicht notwendigerweise 1 oder -1 zurück, sondern irgendeinen positiven bzw. irgendeinen negativen Wert,
|
ich glaube, das hängt von der jeweiligen C Implemntierung ab. Bei mir (glibc 2.3.4.20041102) bekomme ich immer -1 oder 1
C++: |
#include <stdio.h> #include <stdlib.h> #include <string.h>
int mystrcmp(const char* str1, const char* str2) { size_t s1, s2, i=0; s1 = strlen(str1); s2 = strlen(str2);
while(str1[i] && str2[i] && (str1[i] == str2[i])) ++i;
if(s1 != s2) return str1[i] < str2[i] ? -1 : 1;
return (i==s1 ? 0 : (str1[i] < str2[i] ? -1 : 1)); }
int main(int argc, char** argv) { printf(" strcmp(\"%s\", \"%s\")=%d\n", argv[1], argv[2], strcmp(argv[1], argv[2])); printf("mystrcmp(\"%s\", \"%s\")=%d\n", argv[1], argv[2], mystrcmp(argv[1], argv[2])); return 0; }
|
Ich bekomme z.b. immer dasselbe.
Bash: |
rex@supertux:~/tmp> gcc strcmp.c -ostrcmp rex@supertux:~/tmp> echo "\ > Hallo Hallo > H0allo Hallo > hallo hallo1 > hAlLo HaLlo > amam mama > 0xdeadbeef Oxdeadbeef" | awk '{ system("./strcmp " $1 " " $2) }' strcmp("Hallo", "Hallo")=0 mystrcmp("Hallo", "Hallo")=0 strcmp("H0allo", "Hallo")=-1 mystrcmp("H0allo", "Hallo")=-1 strcmp("hallo", "hallo1")=-1 mystrcmp("hallo", "hallo1")=-1 strcmp("hAlLo", "HaLlo")=1 mystrcmp("hAlLo", "HaLlo")=1 strcmp("amam", "mama")=-1 mystrcmp("amam", "mama")=-1 strcmp("0xdeadbeef", "Oxdeadbeef")=-1 mystrcmp("0xdeadbeef", "Oxdeadbeef")=-1
|
-- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth! |