PROBLEM: Pointer in einer Struct und strcpy



  • Hallo ihr fleißigen Communicaner 😃

    ich habe hier mal eine kleine Verkettete Liste geschrieben und hänge jetzt an einem (wahrscheinlich trivialen) Problem fest.
    Hier der code

    #include "stdafx.h"
    #include <stdlib.h>
    #include <string.h>
    
    struct Adresse
    {
    	char name[30];
    	char tele[25];
    };
    struct node
    {
    	int zahl;
    	struct Adresse *adr;
    	struct node *pnext;
    };
    
    int neues_element(struct node *n, int wert, char *ort) // Neues Element rechts von *n einfügen
    {
    	if(n == NULL)
    	{
    		printf("Erste Runde!\n");
    		n->zahl = wert;
    	}
    	else
    	{
    		printf("Andere Runde\n");
    		// Element erzeugen
    		node *neu = (node*) malloc(sizeof(node));
    		strcpy( neu->adr->name ,ort); // neu->adr->name funktioniert nicht
    		neu->zahl = wert;
    		neu->pnext = n->pnext;
    		n->pnext = neu;
    	}
    	return 0;
    }
    void main(void)
    {
    	char name1[20] = "Hallo", name2[20];
    	char *pname1 = name1;
    	char *pname2 = name2;
    	strcpy(pname2,pname1);
    	struct node liste;
    	struct node *erster_liste = &liste;
    	struct node *paktuell = &liste;
    	for(int i = 0; i < 10; i++)
    	{
    		neues_element(paktuell,i, "Dieter");
    	}
    	loesche_element(*erster_liste,5);
    }
    

    Das Problem liegt bei:

    printf("Andere Runde\n");
    		// Element erzeugen
    		node *neu = (node*) malloc(sizeof(node));
    		strcpy( neu->adr->name ,ort); // neu->adr->name funktioniert nicht
    		neu->zahl = wert;
    		neu->pnext = n->pnext;
    		n->pnext = neu;
    

    Was mache ich falsch?

    mit freundlichen Grüßen

    Bandergott 😃



  • Beschreibe deinen Fehler,
    lerne vernünftig einzurücken,
    lerne Codetags zu benutzen,
    lerne standardkonform zu programmieren,
    wer verk. Listen benutzt, ist selbst Schuld.



  • Du mußt auch für adr noch Speicher per malloc reservieren (da dies ja selber nur ein Zeiger ist) - oder aber du änderst die Struktur so ab, daß adr direkt eingebettet wird:

    struct node
    {
    int zahl;
    struct Adresse adr;
    struct node *pnext;
    };
    

    Zugriff dann per

    neu->adr.name
    

    (aber warum nennst du den Funktionsparameter 'ort', wenn dort der Name drinsteht?)

    PS: Aus irgendeinem Grund funktioniert das Syntaxhighlighting bei deinem Beitrag nicht - aber wenn ich deinen Beitrag kopiere oder zitiere und dann die Vorschau benutze, werden die Code-Blöcke angezeigt (wobei es von deiner Seite noch besser wäre die C-Tags zu verwenden, d.h. [code="c"])



  • Ah ok danke, das hat mir weitergeholfen 🙂 ich werde mich wohl noch ein bisschen mit dem Thema auseinander setzen müssen. Trotzdem bin ich froh dass es soweit erstmal läuft! 😃


Anmelden zum Antworten