C- Anfängerfrage

OP #3355101
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
#3355112
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
Gast #3355120
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']
#3355150
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.
Gast #3355191
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.
#3355203
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren