2016-10-24 8 views
1
char a[MAX_NR_DIGITS] = {5, 2, 1, 3, 5, 0, 7, 3, 4, 4}; 
int sizeA = 10; 
char n[MAX_NR_DIGITS] = {5, 2, 6}; 
int sizeN = 3; 

Es gibt mir zweimal den Fehler: Variable-Size-Objekt möglicherweise nicht initialisiert. Wie kann ich das lösen?C-Array-Fehler: Objekt mit variabler Größe möglicherweise nicht initialisiert

+2

Was ist 'MAX_NR_DIGITS'? Woher bekommst du die Fehler? Können Sie bitte versuchen, ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen und uns zu zeigen? Und enthalten Sie die vollständige und vollständige und unbearbeitete Fehlerausgabe beim Erstellen? –

+0

Welche Entwicklungsumgebung verwenden Sie? –

+1

Ich denke, dass 'MAX_NR_DIGITS' keine Konstante ist. Es ist nur ein _guess_, weil Sie uns nicht sagen, was 'MAX_NR_DIGITS' ist –

Antwort

1

Wenn diese Arrays im lokalen Gültigkeitsbereich deklariert sind und MAX_NR_DIGITS keine konstante Ganzzahl für die Kompilierung ist, versucht C, ein Array variabler Länge (VLA) zu erstellen. Dies ist ein Array, dessen Größe während der Laufzeit festgelegt wurde.

Der einfachste Weg, dies zu vermeiden, ist, wenn es unbeabsichtigt war, sicherzustellen, dass MAX_NR_DIGITS eine Kompilierzeitkonstante wie #define MAX_NR_DIGITS 10 ist.

Der Grund, warum der Code nicht funktioniert, wenn das Array ein VLA ist, liegt daran, dass Initialisierungslisten nur während der Kompilierungszeit verwendet werden. Daher muss die C-Sprache angeben, dass VLAs nicht initialisiert werden können.

Für eine VLA können Sie einfach dieses Problem umgehen, indem sie dem Array einen Wert in der Laufzeit zuweisen statt:

memcpy(n, &(char[3]){5, 2, 6}, 3); 
Verwandte Themen