Anfänger Problem mit Pointers und Sructs in C

eagle1985

Mitglied
Hallo zusammen ich habe eine Problem beim zuweisen von Werten in ein Struct.

Dies definiert sich im header.h folgendermasen:
Code:
/**
 * Address structure-Pointer
 */
typedef struct Address_ *AddressPtr_t;

/**
 * Addtress Structure
 */
typedef struct Address_ {

    char*        firstName;
    char*        name;
    char*        street;
    int          streetNbr;
    char*        city;
    int          zip;
    AddressPtr_t next;
}Address_t;

die Zuweisung erfolt in folgender Methode:
Code:
int addAddress(AddressPtr_t *header, char afirstName[30], char name[30], char street[30], int streetNbr, char city[30], int zip){

    AddressPtr_t p = malloc(sizeof(Address_t));
    p->next = *header;
    
    header = &p;
    
    
    memcpy(*header->firstName, afirstName, 30);
    memcpy(*header->name, name, 30);
    memcpy(*header->street, street, 30);
    *header->streetNbr = streetNbr;
    memcpy(*header->city, city, 30);
    *header->zip = zip;
    
    return 0;
    
}

leider erhalte ich immer folgende Compile-Fehler:
AddressConsoleIO.c:49: error: request for member `firstName' in something not a structure or union
AddressConsoleIO.c:50: error: request for member `name' in something not a structure or union
AddressConsoleIO.c:51: error: request for member `street' in something not a structure or union
AddressConsoleIO.c:52: error: request for member `streetNbr' in something not a structure or union
AddressConsoleIO.c:53: error: request for member `city' in something not a structure or union
AddressConsoleIO.c:54: error: request for member `zip' in something not a structure or union

hat jemand eine Idee was ich hier falsch mache?
Bei Pointer muss man ja -> verwenden und nicht den . Operator oder?

Besten dank
 
Besten Dank,

so hat es geklapt :)
jedoch nur wenn ich im Struct folgendes nutzte
Code:
char  firstName[30];
anstelle von
Code:
char*  firstName;

sonst bricht er einfach ohne Fehlermeldung den Vorgang beim memcpy ab...

jemand eine Idee hierfür?
 
jedoch nur wenn ich im Struct folgendes nutzte
Code:
char  firstName[30];
anstelle von
Code:
char*  firstName;

sonst bricht er einfach ohne Fehlermeldung den Vorgang beim memcpy ab...

jemand eine Idee hierfür?
Du hast keinen Speicher für firstName alloziert.
C:
p->firstName = malloc(strlen(afirstName) + 1);
strcpy(p->firstName, afirstName);
Und du speicherst die Adresse einer temporären Variablen in header (Zeile 6). Das kann nicht funktionieren. Vermutlich ist es so gedacht:
C:
*header = p;
Gruß
 
Zurück