2016-04-27 11 views
0

Ich denke, mein Englisch ist einfach zu schlecht, um die anderen Artikel darüber zu verstehen. Aber trotzdem:C Programmierung - Nicht statische Initialisierung eines flexiblen Array-Member

Ich dachte nur, ich könnte ein Programm schreiben (in C), das eine Reihe von Karten speichern kann. Nicht kompliziert, speichern Sie einfach Werte und Namen von Karten und drucken Sie sie aus. Ich bin ein Anfänger in C, und weil ich in meinem Buch "Strings in Structures" bin, wollte ich Strukturen selbst ausprobieren. Dies ist mein Code so weit:

#include <stdio.h> 

struct card 
{ 
    int value; 
    char name[]; 
}; 

int main(void) 
{ 
    const struct card heart[13] = { {2,"two"}, {3,"three"}, {4,"four"}, {5,"five"}, {6,"six"}, {7,"seven"}, {8,"eight"}, {9,"nine"}, {10,"ten"}, {11,"jack"}, {12,"queen"}, {13,"king"}, {14,"ace"} }; 
    int i; 

    for (i = 0; i < 13; ++i) 
    { 
     printf("The card heart-%s has the value of %i", heart[i].name, heart[i].value); 
    } 

return 0; 

}

Ich wollte nur testen, ob es funktioniert, so dass ich nur die Herz-Karten in den Code geschrieben haben. Wenn ich diese Datei kompilieren möchte, trifft mein Compiler (gcc/mingw) mich mit 26 Fehlern. Es heißt: "(in der Nähe der Initialisierung des Herzens [0])" "nicht statische Initialisierung eines flexiblen Array-Mitglied" Ich verstehe das nicht wirklich. In dem Buch funktioniert alles wie erwartet. Ich habe versucht, den Code im Buch neu zu erstellen und die Namen zu ändern, aber es funktioniert nicht. Ich denke, es ist ein Problem mit den Strings, denn wenn ich nur ganze Zahlen verwende, funktioniert alles. In bereits in einem anderen Beitrag gelesen, dass jede Zeichenfolge manuell zugeordnet werden sollte, und es gab ein Codebeispiel, aber ich weiß nicht, was alle Zeilen bedeuten sollten, und ich möchte verstehen, was mein Code tut, also nicht Kopieren + Einfügen

Können Sie mir erklären, warum das nicht funktioniert? PS: Ich schreibe gerade in Windows, also bitte benutze keine bash Befehle um das zu erklären oder so ähnlich. Ich bin auch Deutsch und mein Englisch ist nicht das "Gelb des Eis", versuche es zu erklären, ohne komplexe 'Satzbau' zu benutzen (ich hoffe du weißt was ich meine: D) und ungewöhnliche Wörter.

Danke für alle Hilfe!

+0

Wenn Ihr „Compiler mit 26 Fehler trifft“, vielleicht sollten Sie versuchen, etwas einfacher erste Zusammenstellung? –

+0

Ich vermute, dass Sie einige Zeichen für die Kartennamen zuweisen müssen. Versuchen Sie in 'struct card', von' char name [] 'zu' char name [16] ' – yano

+1

zu wechseln oder versuchen Sie es mit' const char * name'. – user3528438

Antwort

2

Sie müssen etwas Platz für den Namen jeder Karte erstellen. Der einfachste Weg, dies zu tun wäre, um Ihre struct card Definition etwas zu ändern wie:

struct card 
{ 
    int value; 
    char name[16]; // doesn't have to be 16, but make sure it's large enough to hold each card name plus a '\0' terminator 
};