Hallo Leon,
Ich schreibe in einen Zeiger, dem keine Variable zugewiesen
wurde, dieses „Davis“. Das schon mal ist eigentlich
grausam(wenn ich dich richtig verstehe und mein Verstand mir
das so sagt).
Wenn ich jetzt versuche in diesen nicht initalisierten Zeiger
zu schreiben, meint Linux: "Vorsicht, das könnte über den
Speicher hinausgehen, den „Davis belegt“.
Du bringst da noch einiges durcheinander, also fangen wir mal klein an:
char c1;
char c2 = ‚A‘;
static char c3;
void f(void)
{
char c4;
char c5 = ‚B‘;
static char c6;
}
c1-c3 werden im DATA-Segment abgelegt. Bein Programm-Start wird dieser Speicherbereich mit Nullen gefüllt, bzw. mit dem Initialisierungs-Wert.
Also: c1 und c3 enthalten 0x00; und c2 den Wert 0x41. „static“ bei c3 bewirkt hier nur, dass „c3“ ausserhalb des Moduls nicht sichtbar ist.
c4 und c5 werden auf dem Stack abgelegt und liegen deshalb bei jedem Aufruf von f() an einer anderen Speicheradresse. C5 wird bei jedem Aufruf mit dem Wert 0x41 „gefüllt“ wohingegen der Wert von c4 zufällig ist, je nachdem was da vorher an diese Speicherstelle geschrieben wurde.
Bei c6 bewirkt „static“, dass der Speicherplatz für diese Variable NICHT auf dem Stack angelegt wird, sondern im DATA-Segment. Dadurch bleibt der Wert von c6 auch nach dem verlassen von f() weiter erhalten.
Oder ist „Davis“ nicht veränderbar, weil halt am Anfang
zugewiesen wurde und jetzt halt das so ist?
„Davis“ (0x44, 0x61, 0x76, 0x69, 0x73, 0x00) wird im CONST-Segment abgelegt. Dieses ist schreibgeschützt.
Eine Zeigervariable (z.B. char *pstr) enthält nur die Speicher-ADRESSE unter welcher „Davis“ abgelegt wurde.
Also mit pstr = „Davis“ wird nur die Speicher-Adresse unter welcher „Davis“ abgelegt wurde in pstr abgelegt. pstr ist keineswegs uninitialisiert, aber zeigt auf einen schreibgeschüzten Speicher-Bereich.
Ginge es denn auch so?:
char string[10] = „Davis“;
char *pS t ring = &string[0];
toupper(*pString)
Ja, weil jetzt „Davis“ nach string[10] KOPIERT wird.
Sorry für meine Begriffstutzigkeit…bin halt wirklich nur
Newbie, der sowas überhaupt nicht in seinen C-Büchern gelesen
hat(ist jetzt das Buch grottenschlecht oder ich zu blöd?)
Auch ich habe mal angefangen und hatte damals so meine Probleme…
MfG Peter(TOO)