sizeof(string)



  • Ich bin grad auf etwas gestossen, das mir nicht ganz klar ist.
    Wieso ist sizeoh(string) konstant? Bei mir 4.
    Ich meine die Groesse von einem String bestimmen doch die Anzahl der Buchstaben, wie kann das dann konstant sein.
    Mir ist klar, dass ein int, bool, char, double und was weiss ich noch alles konstant sein muss.
    Haben dann auch container ne konstante Groesse? Mir ist das grad alles ziemlich unklar.
    Wär froh wenn mir das alles jemand erklären könnte.

    MFG
    chewbo



  • Für die Länge des string nehm die member funktion size().

    std::string xd = "asdasdasd";
    std::cout << xd.size();
    

    mfg.



  • Das wollte ich eben auch posten. Das war aber nicht die Frage.



  • sollte aber als antwort genügen.



  • Hmm das war wirklich nicht das was ich meinte. Um genau zu sein hab ich hier ein stueck Kot das ich zwar verstehe aber halt nicht warum.

    string words[]={ string("...."),string("...."),...};
    const int n_words = sizeof words / sizeof(string);
    

    Ich kriege die richtige Anzahl von Worter raus aber wie gesagt warum hat jeder String die Groesse von 4?



  • vermutlich weil Deine Stringimplementierung intern nur einen char* - Pointer als member hat und der ist 4 Byte groß.

    const int n_words = sizeof words / sizeof(string);

    ist eigentlich eine gängige Variante um zu bestimmen, wie viele Elemente in einem "normalen" Array sind - unabhängig davon, warum sizeof(string) nun 4 ist.



  • Das macht Sinn. danke. wieder ein bisschen wissender geworden.



  • chewbo schrieb:

    ...warum hat jeder String die Groesse von 4?

    Ist Dir klar, was sizeof bei Klassen macht ?
    Beispiel:

    struct S {
        char* s;
        int l;
    };
    
    int main() {
        std::cout << sizeof(S);
        return 0;
    }
    

    Klar, was das macht ?
    Und das ist eine "Simpelvariante von std::string"....

    Gruß,

    Simon2.



  • Nö, es ist ihm nicht Klar was sizeof() macht, das ist ja das Erschreckende.


Anmelden zum Antworten