2016-12-14 6 views
0

Hallo ich habe folgende Situationstruct Kopie in c wo struct Elemente

typedef struct 
{ 
    int a; 
    Name team[5]; 
    Sport sport[5]; 
} School; 

where Name and Sport are also structs, 

typedef struct 
{ 
    char arry[20]; 
}Name; 

typedef struct 
{ 
     char arry[20]; 
     int tag; 
}Sport; 

dann

School first_school, second_school; 

ich sie einzeln zu füllen, dann irgendwann ich

first_school = second_school 

Aber Ich gehe durch den Code, diese Zeile scheint nicht zu funktionieren. Wie soll ich kopieren?

+1

Das Problem ist nicht in den Code geschrieben. Bitte geben Sie ein minimales Beispiel dafür an, wie Sie diese Strukturen verwenden. – Lundin

Antwort

-2

Es funktioniert für die meisten Mitglieder, aber Sie haben eine, die nicht so kopiert werden kann arry. Sie sollten jeweils ein Element vom Ziel in die Zielinstanzen kopieren.

Beachten Sie, dass Funktionen wie memcpy() für das Kopieren zuständig sind. Aber Sie können ein Array nicht durch Zuweisung kopieren, wie Sie es mit einer int oder einer struct tatsächlich tun.

+0

Sie können die Zuweisung wirklich gut verwenden, wenn das Array eine feste Größe hat und sich in einer Struktur befindet. Dies ist nicht die Ursache des Problems hier. – Lundin

2

Aber ich Schritt durch Code diese Zeile scheint nicht zu funktionieren. Wie soll ich kopieren?

Es ist ganz richtig Struktur wie die

first_school = second_school; // valid 

zu kopieren, wenn es nicht wie erwartet funktioniert dann der Fehler woanders ist. Zum Beispiel müssen Sie strcpy() für String-Mitglieder tun.

+0

'Sie müssen Strcpy für String-Mitglieder tun.' also sollte ich auf alle Schnurelemente getrennt aufpassen. wie kopieren sie 1 zu 1 mit strcpy? – vow

+0

@vow diese Aussage gilt für die erste Strukturinitialisierung. Wenn die Struktur ein String-Member hat, müssen Sie 'strcpy' verwenden, geben Sie den Anfangswert ein. – artm

+0

@vow Die Char-Arrays innerhalb der Strukturen werden kopiert, wenn Sie eine Strukturvariable einer anderen zuweisen. Um den Wert eines char-Arrays zu setzen, würden Sie normalerweise 'strcpy' verwenden. Zum Beispiel: 'strcpy (second_school.team [0] .arry," Cubs ");' würde der ersten Gruppe von 'second_school' die Zeichenfolge' Cubs' zuweisen. –

1

Strukturen sind Werte, die zugewiesen werden können. Sie können Arrays enthalten, die nicht zuweisbar sind, aber innerhalb einer struct macht es möglich.

Dieser Code ist in Ordnung, außer dass Sie die Reihenfolge der Erklärungen, da School Referenzen Name und Sport umkehren sollen, müssen sie zuerst deklariert werden.

ich es getestet und es funktioniert gut, nachdem die Erklärung Reihenfolge umgekehrt, diese druckt hello:

int main(void) { 
    School foo, bar; 
    strcpy(bar.team[0].arry, "hello"); 
    foo = bar; 
    printf("'%s'\n", foo.team[0].arry); 
    return 0; 
} 

Es wahrscheinlich mit der Initialisierung der second_shool etwas anderes falsch ist, oder Sie Fehler zu überprüfen, ob es funktionierte.