länge eines string arrays



  • hi,

    ich hab folgendes problem. Ich würde gerne die Länge eines std::string arrays ermitteln. Das geht ja leider nich wie bei anderen arrays mit sizeof(dasArray)/sizeof(typDesArrays).
    Ich hab auch ne Lösung gefunden allerdings geht die nur für den debug modus von VC++.

    Dafür das mich hier niemand falsch versteht. Ich will nicht die Länge eines std::strings ermitteln sondern eines std::string arrays, also die Anzahl der Elemente... also:
    std::string arr[] = {"a", "b", "c"};

    Danke schonmal für jede hilfe


  • Mod

    Das sollte eigentlich mit sizeof(dasArray)/sizeof(typDesArrays) gehen, was funktioniert denn nicht?

    edit: Hier noch eine Demo:

    #include <string>
    #include <iostream>
    int main()
    {
    std::string arr[] = {
       "Der Speicherplatz für den Inhalt des Strings liegt auf dem Heap", 
       "Der String selbst ist bloß ein Struct mit ein paar Verwaltungsdaten und einem Pointer", 
       "Stringarrays verhalten sich daher wie alle anderen Arrays auch, egal wie lang die Zeichenketten sind"}; 
    
    std::cout<<sizeof(arr)/sizeof(std::string)<<std::endl; // 3
    
    }
    


  • 1700 schrieb:

    Dafür das mich hier niemand falsch versteht. Ich will nicht die Länge eines std::strings ermitteln sondern eines std::string arrays, also die Anzahl der Elemente... also:
    std::string arr[] = {"a", "b", "c"};

    Das geht ja leider nich wie bei anderen arrays mit sizeof(dasArray)/sizeof(typDesArrays).

    Müsste aber.
    sizeof(arr)/sizeof(arr[0])



  • hä ok... jetzt klappt es irgendwie echt.... sorry dann muss ich irgendwas falsch gemacht haben:D

    alles klar danke thread kann geschlossen werden :D:D


  • Mod

    1700 schrieb:

    alles klar danke thread kann geschlossen werden :D:D

    Nicht so schnell: Wenn du Arrays unbekannter Größe hast, bist du sicher, dass Arrays die optimale Datenstruktur für dein Problem sind? Vielleicht wäre sowas wie std::vector oder eine gekapselte Arrayklasse besser.



  • nene das is n vordefiniertes array... für dynamische zwecke nutze ich std::vector 😉



  • 1700 schrieb:

    nene das is n vordefiniertes array... für dynamische zwecke nutze ich std::vector 😉

    Und für statische empfehle ich dir, std::tr1::array zu nutzen (oder boost::array ). Das hat keinen Overhead gegenüber BuiltIn-Arrays, aber besitzt Laufzeitprüfungen im Debug-Modus und ein STL-kompatibles Interface (z.B. size() -Methode), was beides von grossem Vorteil sein kann.

    Ich verwende kaum noch rohe Arrays und war schon mehrere Male um die Assertions von std::tr1::array froh, welche schwer auffindbare Fehler vermieden hatten.


Anmelden zum Antworten