[C/C++] Problem mit dynamisch erstelltem Array

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Gibbon, 30. Mai 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 30. Mai 2008
    Problem mit dynamisch erstelltem Array

    Code:
    int main()
    {
     char* test = new char[5];
     cout << strlen(test);
     
     return 0;
    }
    Wieso gibt strlen(test) 8 statt 5 aus?
     
  2. 30. Mai 2008
    AW: Problem mit dynamisch erstelltem Array

    strlen gibt die wirkliche länge des textes der variable wieder. Da du ihr keinen text zugewiesen hast gibt strlen irgendwas aus (je nach dem was ich grade im speicher befindet). Möchtest du die größe des reservierten speichers haben musst du sizeof benutzen.

    Giebt irgendwas aus:
    Code:
    int main()
    {
     char* test = new char[5];
     cout << strlen(test);
     
     return 0;
    }
    
    Gibt 5 aus:
    Code:
    int main()
    {
     char* test = new char[5];
     cout << sizeof(test);
     
     return 0;
    }
    
    Gibt 3 aus:
    Code:
    int main()
    {
     char* test = new char[5];
     test = "123";
     cout << strlen(test);
     
     return 0;
    }
    
    Hoffe ich konnte helfen.
     
  3. 30. Mai 2008
    AW: Problem mit dynamisch erstelltem Array

    wenn du eine variable dynamisch anlegst, jedoch nicht initialisierst zeigt diese irgendwo im speicher hin, darum das von dir nicht erwartete verhalten. darum immer initialisieren, kann sonst in c++ zu den schlimmsten bugs führen und die findet man dann ewig nicht, ich spreche aus erfahrung
     
  4. 30. Mai 2008
    AW: Problem mit dynamisch erstelltem Array

    Du kannst mit strlen nicht die Größe des reservierten Speichers ermitteln.
    Nur die Länge des Textes/Inhaltes der an der Adresse ist, sprich der sucht nach dem
    Wert 0 und gibt die Differenz des Sart und Endwertes aus.
    Da dem Array kein Inhalt zugewiesen wird ist dieser undefiniert und es ist "Zufall" das er dir den Wert 8 zurückspuckt.

    Mir ist auch nicht bekannt, dass man ohne weiteres die Länge des reservierten Speichers
    an einer Addresse erhalten kann.

    //Edit: da waren doch einige schneller

    Aber:
    Dies gibt nicht 5 aus sondern 4, da er die größe des Pointer zurück gibt und ein Pointer
    kann man mit einem unsigned int vergleichen der die Größe 4 hat. Wie gesagt mir ist kein
    einfache Methode bekannt mit der man die größe eines dynamischen Arrays erhalten kann.
    Eventuell über umwäge....



    Mfg Rushh0ur
     
  5. 30. Mai 2008
    AW: Problem mit dynamisch erstelltem Array

    Alles klar! Und wieso gibt das


    Code:
    int main()
    {
     char test[4] = "test";
     cout << strlen(test);
    
     return 0;
    }
    7 aus? Langsam verzweifle ich
     
  6. 30. Mai 2008
    Zuletzt von einem Moderator bearbeitet: 13. April 2017
    AW: Problem mit dynamisch erstelltem Array

    Hm.. bei mir gibt er immer die richtige länge aus.

    @ Rushh0ur : stimmt hatte ich übersehen
     
  7. 30. Mai 2008
    AW: Problem mit dynamisch erstelltem Array

    Es kommt einfach auf den Compiler an den man benutzt.
    Es gibt Compiler die einen Fehler anzeigen andere nur eine Warnung oder überhaupt nichts.
    Normal fügt jeder Compiler an die Constante, in dem Fall "test", noch eine Null Terminerung an ("\0"), ist jedoch das Array zu klein werden die Daten gekürtzt und die Daten die unmittelbar nach dem Text sich befinden sind undefiniert und dadruch wird wiederum das Ergebniss verfälscht.

    Um dies zu verhindern am besten jeden String/CharArray mit "\0" abschliessen damit es nicht
    zu undefinierten verhalten führt.

    Mfg Rushh0ur
     
  8. 31. Mai 2008
    AW: Problem mit dynamisch erstelltem Array

    Hey!

    '\0'-Terminierung fehlt. Und strlen () macht nichts anderes, als nach diesem '\0' zu suchen.

    Normal macht man das immer so:
    Code:
    int main ()
    {
     char x[MAX_BUF] = { 0 };
     
     // ...
     
     return 0;
    }
    Damit wird x mit '\0'-en initialisiert.

    Mfg,

    Kolazomai
     
  9. 1. Juni 2008
    AW: Problem mit dynamisch erstelltem Array

    Danke! Ich hatte es immer mit char xyz = { \0 }; probiert, was mir aber einen Compilerfehler gebracht hat

    Ich werds später mal ausprobieren. Schonmal danke an alle!
     
  10. 1. Juni 2008
    AW: Problem mit dynamisch erstelltem Array

    Hoi!

    Alternativ:
    Code:
    char x[MAX_BUF] = { '\0' };
    da '\0' = ASCII-Code 0.

    Mfg,

    Kolazomai
     
  11. 1. Juni 2008
    AW: Problem mit dynamisch erstelltem Array

    Code:
    char test[4] = {0};
    
    test[0] = 't';
    test[1] = 'e';
    test[2] = 's';
    test[3] = 't';
    
    cout << strlen(test);
    Gibt 7 aus :angry:
     
  12. 1. Juni 2008
    AW: Problem mit dynamisch erstelltem Array

    Oo
    Du überschreibst ja quwasi den Wert den du vorher zugewiesen hast.
    So richtig:

    Code:
    char test[5] = 'test\0';
    cout << strlen(test);
    
    Immer als letztes Zecichen ein Null Termnierung

    Mfg Rushh0ur
     
  13. 1. Juni 2008
    AW: Problem mit dynamisch erstelltem Array

    Hey!

    C-Programmierung – Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher
    bzw.
    C++-Programmierung – Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher

    Durchlesen & Verstehen!

    Mfg,

    Kolazomai
     
  14. 1. Juni 2008
    AW: Problem mit dynamisch erstelltem Array

    Ich glaub jetz hab ichs verstanden

    BWs gehen raus
     
  15. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.