strlen nachbilden



  • Hi,
    und zwar ist mein Problem folgendes. ES gibt ja in der **Standardlibary die Funktion strlen, womit ich die Länge eines Strings bestimmen kann. Ich will diese Funktion nachbilden, habe jedoch keinen Plan wo ich anfangen sollte.
    Sie sollte wohl irgendwie so aussehen:

    int strlength(char *pcString)
    {
        int iReturnVal;
        //hier muss die Stringlänge bestimmt werden
        return iReturnVal;
    }
    

    Ich habe jetzt aber keinen Plan wie ich nun die Länge des Strings bestimmen kann.
    Falls mir da jemand weiterhelfen könnte währe das super.**



  • ich glaub strlen ist in assembler geschrieben und hab sogar irgendwo den quellcode gesehen. einfach mal googln.

    ich habs mal so gemacht in dem ich ne schleife habe und über einen index auf den string zugreife solange wie string[i] != '\0'. dann i - 1 und ich hatte die stringlänge.



  • int len=0;
    while(*str++) ++len;

    Aus effizients Gruenden implementiert man strlen, memcpy,... in assembler um eben spezielle Tricks zur optimierung verwenden zu koennen - aber eine einfache Schleife wuerde es auch tun.



  • Ich hatte auch mal kurz daran gedacht, nur weiß nicht es muss doch bestimmt auch eleganter gehen.
    Außerdem, was wenn der String nicht nullterminiert ist???
    Dann hängt sich die ganze sache in ner endlosschleife auf.



  • Jeder String in ANSI-C ist nullterminiert, d.h. sein Ende wird durch '\0' angegeben. Darauf kannst du bauen.



  • Original erstellt von rekursiv:
    Ich hatte auch mal kurz daran gedacht, nur weiß nicht es muss doch bestimmt auch eleganter gehen.
    Außerdem, was wenn der String nicht nullterminiert ist???
    Dann hängt sich die ganze sache in ner endlosschleife auf.

    eleganter? das ist doch schon ganz elegant!
    nur eine simple schleife... stoerend ist allerdings, dass jeder schleifen durchlauf einen vergleich hat - das macht aber nichts, denn es kann 'test' verwendet werden weil wir ja auf 0 testen 😉

    insofern sau schnell. schneller gehts nur mit handoptimierten assembler und da traue ich auch nich viel speed zu...

    und:
    ein string der nicht NULL terminiert ist, ist kein string 😉
    mach mal:
    char* s;
    strlen(s);

    das wird auch n bisschen probleme machen 😉



  • Hmm wir haben gerade wieder etwas gelernt 😉
    Danke für die schnellen Antworten


Anmelden zum Antworten