Forum: PC-Programmierung C- Anfängerfrage


von Joe M. (jumper)


Lesenswert?

Hallo zusammen,
kann mir jemand meine Frage beantworten (siehe Kommentar).
1
    int zufallzahl=0;
2
    char *buchstaben;
3
    
4
    zufallzahl=zufallzahl+x
5
    buchstaben = malloc( zufallzahl+1);
6
    buchstaben[zufallzahl]='\0'; // was passiert hier?

buchstaben ist ja ein zeiger auf char für den ein bestimmter Bereich 
allociert wurde. Aber was passiert hier mit der terminierenden '\0'?

Grüße Joe

von Dennis S. (eltio)


Lesenswert?

Hallo,
offensichtlich: an die Stelle mit dem Index zufallzahl wird in das 
Array ein '\0' geschrieben. Das ist in der Regel (keine Ahnung ob es 
Ausnahmen gibt) der "Stringterminator". Mangels echter Strings, erkennt 
C so, ob in einem Char-Array das Ende erreicht ist.

Gruß Dennis

von BLUB (Gast)


Lesenswert?

der Wert der Variable zufallszahl ist ja, wenn du so willst, die Länge 
des Arrays. Somit wird das letzte Element des Arrays mit dem Zeichen 
'\0' gefüllt.

Sagen wir mal die Variable zufallszahl hat den Wert=3


dann Sieht dein Speicher nach der Reservierung so aus weil du 3+1 Byte 
reservierst

0 1 2 3   // Index
[][][][]

nachdem
1
buchstaben[zufallzahl]='\0';
 ausgeführt wurde sieht dein Speicher so aus:

0 1 2 3   // Index
[][][]['\0']

du könntest auch sagen:
1
buchstaben[0]='a'; 
2
buchstaben[1]='b';
3
buchstaben[2]='c';

Dann sieht dein Speicher so aus:

0 1 2 3   // Index
['a']['b']['c']['\0']

von Joe M. (jumper)


Lesenswert?

Danke euch!
Klingt auch logisch, allerdings geht mir aus
1
 buchstaben[zufallzahl]='\0';

nicht hervor dass genau das letzte Element mit '\0' gefüllt wird.
Grüße Joe

von Udo S. (urschmitt)


Lesenswert?

Joe M. schrieb:
> Klingt auch logisch, allerdings geht mir aus
> buchstaben[zufallzahl]='\0';
> nicht hervor dass genau das letzte Element mit '\0' gefüllt wird.

Das ergibt sich automatisch daraus, daß eine Zeile vorher
buchstaben = malloc( zufallzahl+1);

"buchstaben" ein neu alloziertes Char Array zugewiesen wird, daß genau 
"zufallszahl+1" Zeichen groß ist.
Und da der Index jedes Arrays mit 0 beginnt, zeigt der Index 
"zufallszahl" auf das zufallzahl+1 te Element des Arrays.

: Bearbeitet durch User
von Amateur (Gast)


Lesenswert?

Vorne nix, hinten nix: Das ist nix.

int zufallzahl=0;

gefolgt von:

zufallzahl=zufallzahl+x

ist entweder Blödsinn oder gleich x.
Und für die, die es interessiert was x ist: keine Ahnung.

buchstaben = malloc( zufallzahl+1);
Reserviert Platz für eine Zeichenkette mit wahrscheinlich x (+1) 
Zeichen.

buchstaben[zufallzahl]='\0';
Ist eine Angstsequenz die bewirkt dass, falls der Rest des Programms 
genauso strukturiert ist wie die Beispielsequenz, eine eventuelle 
Stringbearbeitungsfunktion spätestens bei: buchstaben[zufallzahl] 
Feierabend macht.

von Udo S. (urschmitt)


Lesenswert?

Amateur schrieb:
> Ist eine Angstsequenz die bewirkt dass, falls der Rest des Programms
> genauso strukturiert ist wie die Beispielsequenz, eine eventuelle
> Stringbearbeitungsfunktion spätestens bei: buchstaben[zufallzahl]
> Feierabend macht.

Nett gesagt :-)

Die aber nur funktioniert solange 'buchstaben' nicht der Zielpuffer 
einer Stringoperation ist. Ansonsten wird das '\0' ggf. gnadenlos 
überschrieben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.