Fehler: unverträgliche Typen bei Zuweisung an Typ 'char[25]' vom Typ 'char *'
Ich versuche zum zuweisen der Werte einer Struktur auf eine Karte, aber folgende Fehlermeldung erscheint nach dem kompilieren:
error: incompatible types when assigning to type ‘char[25]’ from type ‘char *’
in
map[i].n=m.n
Meine Struktur ist so definiert:
struct m1{
int c;
char n[25];
int q_m;
int q;};
Teil von meinem code:
struct m1 m;
struct m1 *map = 0;
scanf("%d",&m.c);
scanf("%s",&m.n);
scanf("%d",&m.q_m);
scanf("%d",&m.q);
map[i].c=m.c;
map[i].n=m.n;
map[i].q_m=m.q_m;
map[i].q=m.q;
InformationsquelleAutor Zombie | 2014-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Array-Ausdrücke können nicht das Ziel eines Auftrags; die
=
- operator nicht definiert ist, kopieren Sie die Inhalt von einem array in das andere.Wenn
n
festhalten sollte eine 0-terminierte Zeichenfolge, verwenden Siestrcpy
:Wenn
n
festhalten sollte, eine nicht 0-terminierte Zeichenkette (oder eine Folge von Zeichen, die mit embedded-0 Werte), verwenden Siememcpy
:Es sei denn, es ist der operand der
sizeof
oder unäre&
Betreiber, oder ein string-literal verwendet wird, zu initialisieren ein array in einer Erklärung, die einen Ausdruck vom Typ "N-element array vonT
" umgewandelt werden ("decay") auf einen Ausdruck vom Typ "Zeiger aufT
", und der Wert des Ausdrucks wird die Adresse des ersten Elements.Das ist, warum Sie bekam die Fehler Meldung Sie haben; der Ausdruck
m.n
Typ "25-element-array vonchar
"; da es sich nicht um die Operanden dersizeof
oder unäre&
Betreiber, es wurde umgebaut zu Typchar *
.map[i].n
war nicht konvertiert (es blieb Artchar [25]
), aber wie ich bereits sagte, array-Ausdrücke können nicht das Ziel der Zuweisungsoperator.Yup. Ich war mit den spezifischen Fehler in der Frage, aber ja,
scanf("%s",&m.n);
werden mussscanf("%s", m.n);
.InformationsquelleAutor John Bode
Array-Variablen kann nicht sein, ein lvalue der Zuweisungsoperator, das ist, dass Sie nicht zugeordnet werden können, nichts.
Kopieren ein array zu kopieren element von element oder die Verwendung einer "low-level" - Funktion wie
memcpy()
zum kopieren einer bestimmten Menge an Speicher auf einmal:InformationsquelleAutor alk
Zuerst müssen Sie Speicher für
map
.und verwenden
strcpy
kopierenm.n
zumap->n
.InformationsquelleAutor haccks
map
ist ein Zeiger, und man sollte reservieren von Speicher, um Sie vor etwas zu schreiben.Dann können Sie
Nachdem dieses Update string-copy -
InformationsquelleAutor Gopi
Wie es scheint, was Sie wahrscheinlich wollen, zu tun (neben der allokierung von Speicher für die Struktur), ist das kopieren der Inhalt des Arrays verweist
n
, anstatt nur das kopieren der eigentlichen Zeiger.InformationsquelleAutor Tommy Andersen
Kopieren Sie all die Struktur der Mitglieder. Der einfachste Weg das zu tun ist:
InformationsquelleAutor Hans Klünder
Sieht aus wie Sie versuchen, zuweisen direkt m an.n-Wert in das array.
Sehen Sie bitte unten detail Beispiel :
Im obigen code-snippet, den ich versuche zu ordnen "XYZ" an das array der Mitglied des struct db.
Durch die ähnlichen Fehler, da der ptr->db_name = "xyz";
st_dyna_mem.c:14: Fehler: unverträgliche Typen bei Zuweisung an Typ 'char[10]' vom Typ 'char *'
Update :
Für die Festsetzung dieser Art von Problem, das Sie verwenden Können, strcpy() oder memcpy().
EX:
Ausgabe:
db_num:10 db_name:xyz
InformationsquelleAutor KRUPASINDHU MOHANTY