Anfängerfrage



  • genau das hatte ich vermutet und deshalb auch prakisch getestet (am obigen beispiel)

    dennoch... es ist auch bei [1] nix abgestürzt. 😮



  • bertold schrieb:

    dennoch... es ist auch bei [1] nix abgestürzt. 😮

    Du schreibst in Speicher der dir nicht gehört. Das ist insofern blöd, als dass der Speicher uU doch dir gehören kann (du kannst dich aber nicht darauf verlassen).

    Wenn du ein Array mit einem Element erstellst, ist die wahrscheinlichkeit groß, dass mehr Elemente erstellt werden, weil das oft schneller ist. Das ist leider das große Problem des undefinierten Verhaltens - denn es kann abstürzen, muss aber nicht.



  • bertold schrieb:

    genau das hatte ich vermutet und deshalb auch prakisch getestet (am obigen beispiel)

    dennoch... es ist auch bei [1] nix abgestürzt. 😮

    ja, das ist russisches roulette. das verhalten ist undefiniert. sobald du den inhalt einer speicheradresse überschreibst welche dir nicht gehört, und dort schon etwas gelagert war was dein system zum überleben braucht -> absturz.
    du hattest einfach "glück" und hast nichts wichtiges überschrieben.



  • Also für jedes einzelne Zeichen ein Feld reservieren?

    "45.98" = 5 Felder
    "3" = 1 Feld

    Richtig?



  • @Borg & Shade Of Mine

    Vielen Dank! 🙂



  • bertold schrieb:

    Also für jedes einzelne Zeichen ein Feld reservieren?

    "45.98" = 5 Felder
    "3" = 1 Feld

    Richtig?

    Fast.

    In C wird ein String dadurch bestimmt, dass am Ende ein spezielles Zeichen steht, dass anzeigt: hier ist der string aus. Dieses Zeichen muss auch noch Platz haben.

    Also, um 7 Elemente zu speichern, braucht man Platz für 8 Elemente.
    "3" sind somit 2 Elemente:
    '3', 0

    (0 zeigt an, dass hier der string aus ist)



  • Stimmt, ... nullterminiert heißt das. oder?

    Gut, dass ich nochmal gefragt hab'. 😃



  • bertold schrieb:

    Stimmt, ... nullterminiert heißt das. oder?

    exakt



  • Angenommen, der User gibt nun "45.98"

    in die Edit-Box ein... Kann ich dann auch zur Laufzeit irgendwie

    Buffer[LaengeVonUserEingabe(Edit1->Text)] irgendwie festlegen?

    Gut, das wäre noch einfach, ..., aber angenommen die "45.98" werden in meinem Programm zur Laufzeit erzeugt. 🕶



  • normalerweise nimmt man dann einen vector. wenn du es als char speichern willst solltest du eher nen string nehmen. falls es wie im beispiel um eine zahl geht packt man die in ein double und nicht in nen array.
    wenn das alles nicht zutrifft musst du machen:

    char *charArray = new char[zurLaufzeitFestgestellteLaenge];
    ...
    ...
    delete[] charArray;
    

Anmelden zum Antworten