Heim > Backend-Entwicklung > C++ > Hauptteil

Wie kann man in C ein Array mit dynamischer Größe korrekt deklarieren?

Linda Hamilton
Freigeben: 2024-11-18 10:45:02
Original
583 Leute haben es durchsucht

How Can You Correctly Declare an Array with a Dynamic Size in C?

Dynamische Array-Erstellung in C, wenn die Array-Größe variabel ist

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 ... */
}
Nach dem Login kopieren

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?

Problem: Arrays variabler Länge in C

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.

Alternative Lösungen

Es gibt mehrere alternative Lösungen für dieses Problem, jede mit ihren eigenen Vor- und Nachteilen:

1. std::vector

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);
Nach dem Login kopieren

2. neuer Operator

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;
Nach dem Login kopieren

3. Externe Bibliotheken

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage