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



## Binary.Coder (9. Aug 2010)

Hallo zusammen,

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





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!


----------



## maki (9. Aug 2010)

*wahr wohl wer schneller*

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


----------



## Binary.Coder (9. Aug 2010)

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 (9. Aug 2010)

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.


----------



## Binary.Coder (9. Aug 2010)

ah ok, super danke!
D.h. der schreibt alles voll und ganz am Ende die 0x0 in den freien Bereich oder?


----------



## ice-breaker (9. Aug 2010)

jup


----------



## Binary.Coder (9. Aug 2010)

Danke!


----------

