Direkte string-Zuweisung an char zeiger?seit wann geht den sowas?

xFile

Mitglied
hallo zusammen,
ich programmiere schon seit mehreren jahren, habe viele bücher gelesen...
jedoch bin ich gestern auf etwas gestoßen, was mich ziemlich verwundert hat:

Code:
char *a = "hallo";
char *b = "hallo";
char *c;

c = b;

if(a == c)
    fkt();
man kann zwar mit scanf() nicht direkt in ein zeiger einlesen, das ist klar...
aber das code-bsp. hab ich so bis jetzt noch nie in einem lehrbuch gesehen.

kann es evtl. sein, dass der compiler den speicherplatz selbständig per malloc anfordert?

hoffe ihr habt eine erklärung und wenn ja dann ist die bestimmt voll simple und ich pack mir an kopf :confused:
 
Ich verstehe deine Problemstellung nicht ?
Aber falls du dich wunderst warum die fkt() nicht aufgerufen wird, liegt das daran das die beiden pointer nicht auf dasselbe zeigen, sondern auf unterschiedlicher Speicheradresse.

Aber bitte formuliere doch dein Problem so das selbst ich es verstehen kann :)

mfg
 
das problem ist...das es funktioniert ! :-P
du kannst einem zeiger einfach einen string zuweisen und die abfrage wird mit true bestätigt.
das versteh ich nicht! den eigentlich dürfte das niemals funktionieren, da der zeiger ja überhaupt kein zugewiesenen speicher hat.
 
Ein string literal wird intern genauso wie ein \0 terminiertes char[] gehandhabt. Der einzige Unterscheid ist, dass das gute Stueck im Gegensatz zu einem per malloc allokierten char array nicht im heap, sondern im data block des prozessabbilds gespeichert wird.
 
ok, das erklärt einiges.
aber rein logisch konnte ich das nicht nachvollziehen, weil:
ein zeiger zeigt immer auf den anfang eines bereichs im speicher. zb für den typ char.
doch wenn er nur per deklaration (char *c;) angelegt wird, zeigt er ins undefinierte.
wie soll man dem was zuweisen...das hab ich mich gefragt. ;)
 
also das ist so vom logischen her gesehen ungefähr das gleiche wie das hier,
Code:
char a[] = "Hallo";

und das geht ja auch ^^
 
Falls du es evtl. doch nicht so richtig verstanden hast: a, b und c sind alle ähnlich. Sie sind vom gleichen Typ. Es sind Zeiger.

Zufällig zeigen a und b nach ihrer Initialisierung beide auf das Wort "hallo", das irgendwo im Speicher, z.B. an Adresse 0x5555 steht.

Das heißt a und b sind Variablen, in denen der Wert 0x5555 gespeichert ist.

In c ist irgendetwas zufälliges gespeichert, da sie nicht initialisiert wurde. Nach der Zuweisung steht auch in c 0x5555 drin und alle Variablen zeigen auf das Wort "hallo".

Gruß
 
Zurück