Endet in C der String mit 0x0 oder nur der Buffer mit 0x0

Binary.Coder

Aktives Mitglied
Hallo zusammen,

sorry ich weiß, es ist nicht Java, dennoch würde ich gerne folgende Frage stellen.
20100809-mfn13mpp13qggmtnuy5rfhikby.jpg

In der Vorlesungsfolie steht, dass der Puffer der Größe 10 Platz für 9 Zeichen bietet, plus abschließende 0x0.

In dem Thema geht es um Buffer-Overflows.
Was ich jetzt nicht verstanden habe ist, ob wenn ich einen String in C reingebe, dann am Ende immer automatisch ein 0x0 gesetzt wird oder ob dieses 0x0 quasi im Buffer schon steht.

Also wenn ich 20 char werte eingebe, dann habe ich 2 Annahmen:

Annahme 1: 20 Char-Werte sind 20 + 0x0 sprich 21 Byte.
Jetzt schreibe ich von unten nach oben voll und es wäre dann der buffer voll mit 10 byte überschrieben, die variable i mit 4 überschrieben wird und die 8 byte dann mit den letzten 6 byte und abschließen dem 0x0 Wert überschrieben wird.

Annahme 2: 20 Char Werte.
Ich schreibe wieder von unten nach oben aber ich gehe davon aus das im Buffer nur 9 Werte reinpassen, weil eine Stelle mit 0x0 belegt und nicht überrschreibbar ist (2.1 also übersprungen wird oder 2.2 doch überschrieben wird).
Die Varialbe i schreibe ich wieder voll und nun verbleiben die letzten 8 byte.
2.1 dort schreibe ich die letzten 7 byte rein.
2.2 dort schreibe ich die letzten 6 byte rein + dem 0x0 byte.

Puh, ich hoffe es kann mir einer diese Frage beantworten.
Im Endeffekt ist die Frage, ob der Buffer oder der String mit 0x0 enden.

Vielen Dank schonmal!
 
M

maki

Gast
*wahr wohl wer schneller*

in C ist das ganz einfach:
Wenn du Buffer sagst, meinst du wohl Array, die größe ist fest.
 
Zuletzt bearbeitet von einem Moderator:

Binary.Coder

Aktives Mitglied
Hi,

nene, so genauso weiß ich das auch nicht aber im Skript stand halt drin, dass der Buffer der Größe 10 Platz für 9 Werte + dem 0x0 hat.
Jetzt ist die Frage, ob die 0x0 in C einfach immer am Ende eines Stringes geschrieben wird oder halt ob diese 0x0 im Buffer drin sind.
 

ice-breaker

Top Contributor
Deine Frage kann man dir nicht beantworten ;)
Strings werden immer mit einem Nullbyte terminiert, korrekt. Hat dein String 20 Chars (ASCII) sind es 21 Byte.
Annahme 1 stimmt ;) Der Puffer wird nicht mehr als ein Array sein, da ein String auch nur ein Char-Array mit einem abschließenden Nullbyte ist.
 

Ähnliche Java Themen


Oben