Array mit variabler Länge wird initialisiert [duplicate]
Lesezeit: 3 Minuten
hackt
Beim Initialisieren eines Arrays mit variabler Länge gibt der Compiler eine Fehlermeldung aus:
[Error] variable-sized object may not be initialized
Code-Auszug:
int n;
printf("Enter size of magic square: ");
scanf("%d",&n);
int board[n][n] = {0};
Wie sollte Arrays mit variabler Länge initialisiert werden? Und warum werden nicht alle Elemente initialisiert 0 wie unten angegeben;
int board[n][n];
board[n][n] = {0};
?
Sie müssen verwenden memset:
memset(board, 0, sizeof board);
Ich habe keine Ahnung memset().
– Hacken
26. Juni 2013 um 23:59 Uhr
Was bedeutet das?
– Karl Norum
27. Juni 2013 um 0:00 Uhr
@hackks du schreibst das einfach unter deine Linie int board[n][n];. Und vergewissere dich #include <string.h>
– i Code 4 Essen
27. Juni 2013 um 0:00 Uhr
#include <string.h> für C.
– Karl Norum
27. Juni 2013 um 0:00 Uhr
Sie wollten es initialisieren 0Rechts?
– Karl Norum
27. Juni 2013 um 1:26 Uhr
AnT steht zu Russland
VLAs können nicht sein initialisiert durch irgendeine Form von Initialisierungssyntax. Sie müssen zuordnen die Anfangswerte für Ihre Array-Elemente nach der Deklaration auf die von Ihnen bevorzugte Weise.
C11: 6.7.9 Initialisierung (p2 und p3):
Kein Initialisierer darf versuchen, einen Wert für ein Objekt bereitzustellen, das nicht in der zu initialisierenden Entität enthalten ist.
Der Typ der zu initialisierenden Entität soll ein Array unbekannter Größe oder ein vollständiger Objekttyp sein das ist kein Array-Typ mit variabler Länge.
du meinst zu sagen int board[n][n];board[n][n] = {0};. Rechts?
– Hacken
27. Juni 2013 um 0:05 Uhr
@hackks: Nein. Arrays sind nicht zuweisbar. Aus diesem Grund habe ich gesagt: “Weisen Sie Ihrem Array die Anfangswerte zu Elemente“. Abgesehen von solchen Rohspeicheroperationen wie memset oder memcpy, muss dies Element für Element erfolgen. Also, ich wollte damit sagen for (i = 0; i < n; ++i) ... usw.
– AnT steht zu Russland
27. Juni 2013 um 0:37 Uhr
Ich habe gelesen, dass Array als initialisiert werden kann array[m][n] = {0}dies wird sein erstes Element zu initialisieren 0 und verbleibende Elemente werden initialisiert 0 selbst.
– Hacken
27. Juni 2013 um 0:46 Uhr
@hackks: “Initialisiert” bedeutet das = { 0 } kann als Initialisierer in einer Deklaration angegeben werden. Was Sie in Ihrem ersten Kommentar haben, ist völlig falsch. Und selbst in einer Deklaration funktioniert es nur mit Nicht-VLA-Arrays. Zum Beispiel können Sie tun int array[10][10] = { 0 }. Diese Frage bezieht sich jedoch speziell auf VLA-Arrays. VLA-Arrays akzeptieren keine Initialisierer. Du kannst nicht tun int array[m][n] = { 0 } Wenn m und n sind keine Konstanten.
– AnT steht zu Russland
27. Juni 2013 um 1:59 Uhr
Parag Gangil
1. Sie können das Array einfach wie folgt initialisieren:
int n;
printf("Enter size of magic square: ");
scanf("%d",&n);
int board[n][n];
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
board[i][j] = 0;
}
}
2. memset() sollte nur verwendet werden, wenn Sie das Array auf “0” setzen möchten.
“… memset() sollte nur verwendet werden, wenn Sie das Array auf “0” setzen möchten.„Hu! Warum das?
– alk
24. Dezember 2013 um 16:42 Uhr
@alk: Die memset() Die Funktion füllt die ersten n Bytes des Speicherbereichs, auf den s zeigt, mit dem konstanten Byte c. Während die Größe der Ganzzahl im Allgemeinen 4 Bytes beträgt, können wir die Ganzzahl nicht auf unsere gewünschte Zahl setzen, aber “0” ist ein Sonderfall, da mit “0” memset() setzt alle Bytes auf “0”.
– Parag Gangil
26. Dezember 2013 um 7:49 Uhr
@ParagGangil; memset() sollte nur verwendet werden, wenn Sie das Array auf “0” setzen möchten: Nicht wahr.
– Hacken
10. März 2015 um 19:02 Uhr
12827700cookie-checkArray mit variabler Länge wird initialisiert [duplicate]yes