strlen für Konstanten char*



  • Hallo zusammen,

    ich kann ja die Länge einer Zeichenkette mit strlen() ermitteln.

    Wenn ich aber nen konstanten String habe,
    kann ich den zwar auch so ermitteln:

    const char* str = "Mein String";
    int length = strlen(str);
    

    Aber der sucht doch dann nur nach dem abschließenden \0, oder?
    Das kostet doch unnötige Rechenzeit.
    Kann ich das zur Kompilierzeit schon ermitteln lassen oder wird das
    vom Compiler automatisch optimiert?

    Gruß
    C-Anfänger



  • nee, wird noch nicht optimiert, soweit ich weiss.
    aber die compilerbauer sind schnell. in wenigen jahren gehört deine optimierung bestimmt zum standard.

    bis dahin reicht

    const char str[] = "Mein String";
    int length = sizeof(str)-1;
    


  • thx...

    Eine Frage hab ich noch...
    Wann sollte man char* verwenden und wann string?

    Gruß,
    *C-Anfänger*



  • Ein char* wenn die Programmiersprache C heißt
    und einen string wenn sie c++ heißt.



  • und was spricht dagegen ein char* in C++ zu nutzen?

    Die Ideologie, dass man in C++ kein malloc benutzt oder was?
    Aber warum soll ich in C++ immer den (wenn auch minimalen) Overhead in Kauf
    nehmen, der durch die Verwendung von string entsteht...



  • char ist ein Variablentyp, sowohl in C alsauch in C++.
    string ist kein Variablentyp, sondern eine Object-Klasse in C++. Sie enthält aber verschiedene Methoden zur Verarbeitung von char-Variablen. (zusammengefaßt in string.h)



  • Elektronix schrieb:

    string ist kein Variablentyp, sondern eine Object-Klasse in C++. Sie enthält aber verschiedene Methoden zur Verarbeitung von char-Variablen. (zusammengefaßt in string.h)

    Fast richtig - std::string vereinfacht den Umgang mit Zeichenketten (für Details findest du im Magazin einen Artikel zu dem Thema).

    (btw, die Klasse std::string findest du in <string>, <string.h> (bzw. <cstring>) enthält die C-Stringverarbeitungsfunktionen (strlen(), strcpy() etc))



  • Storm.Xapek.de schrieb:

    Ein char* wenn die Programmiersprache C heißt
    und einen string wenn sie c++ heißt.

    das sagen die leute, die c++ langsam machen und dann erzählen, man müsse für embedded systems nur c nehmen, weil c++ langsam sei. das ist gemein von euch.



  • volkard schrieb:

    Storm.Xapek.de schrieb:

    Ein char* wenn die Programmiersprache C heißt
    und einen string wenn sie c++ heißt.

    das sagen die leute, die c++ langsam machen und dann erzählen, man müsse für embedded systems nur c nehmen, weil c++ langsam sei. das ist gemein von euch.

    😃



  • C-Anfänger schrieb:

    thx...
    Eine Frage hab ich noch...
    Wann sollte man char* verwenden und wann string?

    const char* wenn der string konstant ist. normnalerweise geht aber auch static const char[].
    und
    char[] wenn du den string ändern können willst. das erzeugt ne lokale kopie.
    die folge:

    const char str[] = "Mein String";//kopiert das literal "Mein String" nach str
    int length = sizeof(str)-1;//weiss die länge
    

    ist lahmer als deine ursprüngliche verasion mit strlen aber ohne kopie.

    static const char str[] = "Mein String";
    int length = sizeof(str)-1;
    

    sollte beide vorteile vereinen.



  • volkard schrieb:

    das sagen die leute, die c++ langsam machen und dann erzählen, man müsse für embedded systems nur c nehmen, weil c++ langsam sei.

    nicht weil's langsamer ist, sondern weil bei c++ immer so komische fehlermeldungen kommen wie etwa: 'out of allocation space in segment ROM_C000 ...' 😉



  • net schrieb:

    sondern weil bei c++ immer so komische fehlermeldungen kommen wie etwa: 'out of allocation space in segment ROM_C000 ...' 😉

    Vielleicht hilft es, weniger Fehler in deinen Code einzubauen? 🤡



  • C-Anfänger schrieb:

    Aber der sucht doch dann nur nach dem abschließenden \0, oder?
    Das kostet doch unnötige Rechenzeit.
    Kann ich das zur Kompilierzeit schon ermitteln lassen oder wird das
    vom Compiler automatisch optimiert?

    Ganz so lang wie volkard glaubt musst du nicht warten. Das optimieren Compiler mittlerweile schon. Der MSC macht das zB.


Anmelden zum Antworten