Char Array kann mehr aufnehmen als möglich

Hallo,

ich wollte heute früh eigentlich nur ausprobieren, wie cin.getline() funktioniert.

Jetzt bin ich aber auf etwas merkwürdiges gestoßen.

char Eingabe [3];
cin.getline (Eingabe,10); /* Ich hatte mich bei der 2. Angabe in der Klammer vertippt. */

cout > versucht,aber es passiert genau das gleiche…

wie ist das möglich,das er trotzdem so viel speichern kann?
Ich könnte jetzt in char Eingabe [3], 100 oder mehr Zeichen speichern… Weiß jemand woran das liegt?

Hallo,

Jetzt bin ich aber auf etwas merkwürdiges gestoßen.

char Eingabe [3];
cin.getline (Eingabe,10); /* Ich hatte mich bei der 2. Angabe
in der Klammer vertippt. */

cout

Dann müsste man vorher Sicherheitsbedingungen einbauen,die das eingeben von mehr als XYZ Zeichen verhindern?

Hallo,

Dann müsste man vorher Sicherheitsbedingungen einbauen,die das
eingeben von mehr als XYZ Zeichen verhindern?

Richtig. Jedes gute Programm macht das.

Grüße,
Moritz

Hossa :smile:

char Eingabe [3];

Hier reservierst du Speicherplatz für 3 Zeichen. Da diese Reservierung in einer Funktion passiert, wird der Speicher auf dem Stack reserviert. Jeder Thread hat seinen eigenen Thread, die Größe beträgt meistens 1MB, kann aber auch davon abweichen. Das sieht dann auf dem Stack etwa so aus:

Eingabe[0]
Eingabe[1]
Eingabe[2]

Hallo,
das C++ die Arraylängen nicht speichert kann eigentlich nicht sein! Unser Proff hat uns das auch immer erzählt aber meiner Meinung nach wird einfach nur nicht auf die Arraylänge geprüft.
Wie wären sonst Anweisungen wie delete [] möglich?! Da muss ja irgendwo die Grenze intern gespeichert werden oder sehe ich das falsch?
Wäre interessant zu wissen, falls es so ist wie ich sage, wie man diese interne Variable abfragt!

Grüße

Hallo,

das C++ die Arraylängen nicht speichert kann eigentlich nicht
sein! Unser Proff hat uns das auch immer erzählt aber meiner

da hat der Prof nun erstmal auch Recht (ndR). Plain arrays in C++ speichern keine Grösse. Anders sieht das beim std::vector aus, bei dem dann auch mit [] und at() zwei Zugriffsoperatoren zur Verfügung stehen, einer ohne, der andere mit Validierung der Arraygrenzen.

Wie wären sonst Anweisungen wie delete [] möglich?! Da muss ja
irgendwo die Grenze intern gespeichert werden oder sehe ich
das falsch?

Hier reden wir von Datenstrukturen, die per Heapallokierung angelegt werden, also mit dem new[] operator. Diese verwalten idR Informationen zur allokierten Grösse (nicht unbedingt gleich zur Grösse des Arrays!), einfach auch aus dem Grund, weil der delete operator keinen Parameter besitzt, der die allokierte Grösse spezifiziert.

Wäre interessant zu wissen, falls es so ist wie ich sage, wie
man diese interne Variable abfragt!

gar nicht, weil nicht portabel.

Gruss
norsemanna