Benutzer mit den meisten Antworten
kein änderbarer lvalue

Frage
-
Hey,
kann mir hier jmd weiterhelfen. Ich versuche mich gerade auf meine Prüfungen vorzubereiten und habe noch das eine oder andere Problem mit algodats.
wenn ich eine struct erstelle, in der ein char-array vorkommt, bekomme ich später im programmcode das problem das dies anscheined kein änderbarer lvalue ist.
struct node{ char name [255]; unsigned int jahr; unsigned int anzahl; float bewertung; node *next; node *previous; }; void adduser(node*); void del(node*); void printjahr(node*); void printbest(node*); void main(){ node* pHead; node* help; node* pZ; int eingabe; pHead=new node; pHead->name = "Listenkopf"; pHead->jahr=0000; pHead->anzahl=0; pHead->bewertung=0; pHead->next=pHead; pHead->previous=pHead;
der fehler tritt auf in der zeile:
pHead->name ="Listenkopf";
hoffe hier kann mir jmd helfen =)
Antworten
-
Hallo
pHead->name ist ein Array aus char. Das macht ihn zwar auch zu einem Pointer, aber der kann nicht verändert werden (eigentlich gibt es ihn gar nicht).
Wenn du "char* a" schreibst, hast du im Speicher 4/8 Byte, welche den Zeiger ausmachen. Daher kann man die verändern.
Schreibst du "char a[x]", dann wird nur Speicher für den Array angelegt, nicht jedoch für einen Zeiger. Im Programmcode kannst du aber a gleich nutzen wie im ersten Beispiel.
Was du übrigens tun wolltest war etwas in den Array kopieren und nicht den Zeiger kopieren. Das kannst du mit strcpy.
strcpy(pHead->name, "Listenkopf");
Aber vorsicht, dass du den Puffer nicht überfüllst. Besser wäre strncpy zu nehmen oder sonstwie für Sicherheit zu sorgen.
Rudolf
- Als Antwort vorgeschlagen Martin RichterModerator Montag, 11. Februar 2013 06:56
- Als Antwort markiert kinkilla Montag, 11. Februar 2013 09:13
Alle Antworten
-
Hallo
pHead->name ist ein Array aus char. Das macht ihn zwar auch zu einem Pointer, aber der kann nicht verändert werden (eigentlich gibt es ihn gar nicht).
Wenn du "char* a" schreibst, hast du im Speicher 4/8 Byte, welche den Zeiger ausmachen. Daher kann man die verändern.
Schreibst du "char a[x]", dann wird nur Speicher für den Array angelegt, nicht jedoch für einen Zeiger. Im Programmcode kannst du aber a gleich nutzen wie im ersten Beispiel.
Was du übrigens tun wolltest war etwas in den Array kopieren und nicht den Zeiger kopieren. Das kannst du mit strcpy.
strcpy(pHead->name, "Listenkopf");
Aber vorsicht, dass du den Puffer nicht überfüllst. Besser wäre strncpy zu nehmen oder sonstwie für Sicherheit zu sorgen.
Rudolf
- Als Antwort vorgeschlagen Martin RichterModerator Montag, 11. Februar 2013 06:56
- Als Antwort markiert kinkilla Montag, 11. Februar 2013 09:13