Maison > développement back-end > C++ > le corps du texte

Comment déclarer correctement un tableau avec une taille dynamique en C ?

Linda Hamilton
Libérer: 2024-11-18 10:45:02
original
583 Les gens l'ont consulté

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

Création dynamique d'un tableau en C lorsque la taille du tableau est variable

Considérez l'extrait de code suivant :

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 ... */
}
Copier après la connexion

Dans ce code, nous visons à lisez la taille du fichier "test.jpg" et créez un tableau Sbuf pour stocker son contenu. Cependant, la taille de Sbuf est déterminée dynamiquement, en fonction de la taille du fichier. Cela soulève la question : comment déclarer correctement siz pour que le code soit compilé avec succès ?

Problème : tableaux de longueur variable en C

Malheureusement, il n'existe aucun moyen simple de créer un tableau avec un longueur variable en C. Les tableaux de longueur variable, également appelés tableaux flexibles, ne font pas partie du standard C. Par conséquent, le code présenté ci-dessus ne sera pas compilé correctement.

Solutions alternatives

Il existe plusieurs solutions alternatives à ce problème, chacune avec ses propres avantages et inconvénients :

1. std::vector

std::vector est un conteneur de bibliothèque standard en C qui fournit une structure de données dynamique de type tableau. Il alloue et réaffecte automatiquement la mémoire selon les besoins, éliminant ainsi le besoin de déclarer manuellement la taille du tableau. Le code suivant montre comment utiliser std::vector dans ce scénario :

std::vector<char> Sbuf;

Sbuf.push_back(someChar);
Copier après la connexion

2. nouvel opérateur

Une autre option consiste à utiliser l'opérateur new pour allouer dynamiquement de la mémoire au tableau. Cependant, cette approche nécessite une gestion manuelle de la mémoire, augmentant ainsi le risque de fuites de mémoire. De plus, il est généralement recommandé d'utiliser std::vector plutôt que l'allocation directe de mémoire pour les tableaux dynamiques.

char* Sbuf = new char[siz];

// ...

delete [] Sbuf;
Copier après la connexion

3. Bibliothèques externes

Certaines bibliothèques externes, telles que la bibliothèque GNU C (glibc), prennent en charge les tableaux de longueur variable. Cependant, cette fonctionnalité n'est pas standard et peut ne pas être prise en charge sur tous les compilateurs et plates-formes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal