string einem array in einer struktur zuweisen
-
hallo, ich lerne grad c und habe ein programm geschrieben, wo ich nicht weis wo der fehler ist
struct datensatz { char adresse1[41]; char adresse2[21]; char stadt[31]; char staat[21]; char plz[21]; }meineadresse = {"Ahornweg", "25a", "Ingolstadt", "Germany", "44311"}; strcpy(meineadresse.stadt, "Friedrichshofen"); meineadresse.plz = "60213" ;
bei der letzten anweisung (meineadresse.plz = "60213"; ) gibt der compiler mir folgende fehlermeldung: "error: incompatible types in assignment "
was mach ich falsch? beim initialisieren direkt nach der definition sagt der compiler nichts!.
ausserdem kommt bei strcpy(...) ne warnung: "implicit declaration of funktion 'strcpy'.
(ich habe am anfang sowohl stdio.h als auch stdlib.h "included")
-
strcpy ist meines Wissens nach in <string.h>.
-
ja, stimmt, komischerweise funktioniert es aber. das problem ist die letzte zeile
-
Warum schreibst Du nicht :
strcpy(meineadresse.stadt, "Friedrichshofen"); strcpy(meineadresse.plz = "60213");
-
plz ist ein char-Array "65432" ist ein char-Zeiger. Diese Typen sind nur bedingt miteinader kompatibel.
Ein char-Array lässt sich mit einem String-Literal initialisieren.
Wäre eine normale Zuweisung möglich, wöfür bräuchte man dann strcpy?
Also einfach strcpy bzw. strncpy verwenden.Zu dem Nicht-Inkludieren des Headers <string.h>:
In C werden Funkktionen implizit bi ihrer ersten Verwendung deklariert.
Der Kompiler nimmt an, dass die Funktion int zurückgibt und die übergebenen Paramter in ihrer Parameterliste hat.
War hoffe ich halbwegs richtig, kenn mich in C nämlich nicht aus.Gruß
Don06
-
egon2 schrieb:
Warum schreibst Du nicht :
strcpy(meineadresse.stadt, "Friedrichshofen"); strcpy(meineadresse.plz = "60213");
Mein Fehler, ich meinte es so:
strcpy(meineadresse.stadt, "Friedrichshofen"); strcpy(meineadresse.plz, "60213");
also
// strcpy() -Signatur char *strcpy( char *strDestination, const char *strSource );
-
ah.. okay, danke,. ich werd halt immer strcpy nutzen.
wollte nur wissen warum man das nicht normal zuweisen kann. aber jetzt weiss ich ja warum.