Beachten Sie den folgenden Codeausschnitt:
int siz = 0; int n = 0; FILE* picture; picture = fopen("test.jpg", "r"); fseek(picture, 0, SEEK_END); siz = ftell(picture); char Sbuf[siz]; fseek(picture, 0, SEEK_SET); //Going to the beginning of the file while (!feof(picture)) { n = fread(Sbuf, sizeof(char), siz, picture); /* ... do stuff with the buffer ... */ }
In diesem Code streben wir danach Lesen Sie die Größe der Datei „test.jpg“ und erstellen Sie ein Array Sbuf, um seinen Inhalt zu speichern. Die Größe von Sbuf wird jedoch dynamisch basierend auf der Dateigröße bestimmt. Dies wirft die Frage auf: Wie können wir siz korrekt deklarieren, damit der Code erfolgreich kompiliert wird?
Leider gibt es keine einfache Möglichkeit, ein Array mit a zu erstellen Variable Länge in C. Arrays variabler Länge, auch als flexible Arrays bekannt, sind nicht Teil des C-Standards. Folglich wird der oben dargestellte Code nicht korrekt kompiliert.
Es gibt mehrere alternative Lösungen für dieses Problem, jede mit ihren eigenen Vor- und Nachteilen:
std::vector ist ein Standardbibliothekscontainer in C, der eine dynamische Array-ähnliche Datenstruktur bereitstellt. Der Speicher wird je nach Bedarf automatisch zugewiesen und neu zugewiesen, sodass die Array-Größe nicht manuell angegeben werden muss. Der folgende Code zeigt, wie std::vector in diesem Szenario verwendet wird:
std::vector<char> Sbuf; Sbuf.push_back(someChar);
Eine weitere Option besteht darin, den neuen Operator zu verwenden, um dem Array dynamisch Speicher zuzuweisen. Dieser Ansatz erfordert jedoch eine manuelle Speicherverwaltung, was das Risiko von Speicherlecks erhöht. Darüber hinaus wird allgemein empfohlen, std::vector anstelle der direkten Speicherzuweisung für dynamische Arrays zu verwenden.
char* Sbuf = new char[siz]; // ... delete [] Sbuf;
Bestimmte externe Bibliotheken, wie die GNU C Library (glibc), bieten Unterstützung für Arrays variabler Länge. Diese Funktionalität ist jedoch nicht standardmäßig und wird möglicherweise nicht auf allen Compilern und Plattformen unterstützt.
Das obige ist der detaillierte Inhalt vonWie kann man in C ein Array mit dynamischer Größe korrekt deklarieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!