none
kein änderbarer lvalue RRS feed

  • 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 =)

    Samstag, 9. Februar 2013 17:44

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

    Samstag, 9. Februar 2013 19:33

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

    Samstag, 9. Februar 2013 19:33
  • Danke für die Antwort,

    jetzt versteh ich es warum es nicht funktioniert hat ^^

    Sonntag, 10. Februar 2013 19:14