struct StringsBase *StringsBase=0L; /*#define RUN*/ #ifdef RUN char *StrStr(cs,ct) char *cs,*ct; { /* */ char c,searchc,*p=cs,*pt=ct; do { searchc=*pt; c=*p; if((c!=searchc)) { p=++cs; pt=ct; } if(c==searchc) { p++; pt++; } } while(searchc && c); /* entweder String od. Suchstring sind zu Ende*/ if(c) cs--; if(searchc) cs=0; return cs; }; /* strstr $VER 0.3 */ #endif long test(s,ct) char *s,*ct; { long el=0; char *p=(char *)StrStr(s,ct); char *sa[64],*sb[64],*sp[64]; StrCpy(sa,"<"); StrCat(sa,s); StrCpy(sp,"<"); StrCpy(sb,"<"); StrCat(sb,ct); if(p) { StrCat(sp,p); printf("%22s> %22s> %22s>\n",sa,sb,sp); } if(!p) printf("%22s> %22s> not found (p=NULL) \n",sa,sb); return el; /* */ }; int main() { /* MAIN */ long el=0; char *s[64]; strcpy(s,"string"); StringsBase=(struct StringsBase *)OpenLibrary("Strings.library",0); puts("/* Input Search Out "); el=test("test StrStr","Str"); el=test("test StrStr","gh"); el=test("test StrStr","t"); el=test("tes test StrStr","test"); el=test("g","j"); el=test("g","g"); el=test("g",""); el=test("",""); el=test("","h"); el=test("änd","n"); el=test("änd","d"); el=test("änd","änd"); el=test("l1","l1"); el=test(s,"s"); el=test(s,"t"); el=test(s,"r"); el=test(s,"i"); el=test(s,"n"); el=test(s,"g"); el=test(s,"st"); el=test(s,"tr"); el=test(s,"ri"); el=test(s,"in"); el=test(s,"ng"); el=test(s,"str"); el=test(s,"tri"); el=test(s,"rin"); el=test(s,"ing"); el=test(s,"stri"); el=test(s,"trin"); el=test(s,"ring"); el=test(s,"strin"); el=test(s,"tring"); el=test(s,"s"); el=test(s,"sa"); el=test("++L7","+L"); el=test( " bne L7","L"); el=test( " bne -L7","-L"); puts("*/"); if(StringsBase) CloseLibrary(StringsBase); return el; } /* END */ /* verschiedene Compiler verschiedene Ergebnisse: Was ist der korrekte Ruechgabewert bei?: p=strstr("","") Ist p=NULL korrekt ? Ich hab mich fuer die Turbo C Version entschieden! Turbo C 2.01: IN len search len OUT len adr 6 2 4 fbd2 6 3 <(null)> 0 0 6 <> 0 6 fbd0 <> 0 <> 0 <> 0 20d HCC 0.2 IN len search len OUT len adr 6 2 4 2619CA 6 3 <> 0 0 6 <> 0 <> 0 2619CE <> 0 <> 0 <> 0 21E0BD strstr DICE V2.06.21 29 April 1991 IN len search len OUT len adr 6 2 4 7a1076e 6 3 <> 0 0 6 <> 0 <> 0 0 <> 0 <> 0 <> 0 0 StrStr: Strings.library 0.5 6 2 rstr 4 261FEA 6 3 0 0 6 <> 0 strstr 6 261FE8 <> 0 <> 0 0 21DE21 ------------------------ */ /* Input Search Out not found (p=NULL) not found (p=NULL) <> <> <> <> <> not found (p=NULL) <änd> <änd> <änd> <änd> <änd> not found (p=NULL) <++L7> <+L> <+L7> < bne L7> < bne -L7> <-L> <-L7> */