"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment déclarer des tableaux de taille variable dans la norme C?

Comment déclarer des tableaux de taille variable dans la norme C?

Publié le 2025-04-15
Parcourir:820

How Can I Declare an Array With a Variable Size in Standard C?

allocation dynamique du tableau en C avec une taille de tableau de variable

des tableaux de taille variable, également connus sous le nom de tableaux dynamiques, pose un défi dans Standard C. 0;

fichier * image;


image = fopen ("test.jpg", "r");
fseek (image, 0, Seek_end);
siz = ftell (image);

char sbuf [siz];
fseek (image, 0, recherche); // Aller au début du fichier
while (! Feof (image)) {

n = fread (sbuf, sizeof (char), siz, image); / * ... faites des trucs avec le tampon ... * / / * memset (sbuf, 0, sizeof (sbuf)); * /

}

pre>
n = fread(Sbuf, sizeof(char), siz, picture);
/* ... do stuff with the buffer ... */
/* memset(Sbuf, 0, sizeof(Sbuf)); */
Le code ci-dessus tente d'allouer un tableau de caractères avec une taille déterminée par une variable siz. Cependant, dans la norme C, la taille des réseau doit être des constantes. This poses the question: how can we declare siz correctly to allow code compilation?


Unfortunately, there is no direct method to declare an array with a variable size in standard C. However, several alternatives exist:

std::vector:

In modern C , the std::vector container can be used as a flexible alternative to tableaux. Il peut être facilement étendu à n'importe quelle taille souhaitée et son utilisation est relativement simple.
  • Nouvel opérateur: Le nouvel opérateur peut être utilisé pour allouer la mémoire dynamiquement sur le tas. Pour créer un tableau avec une taille variable, on peut utiliser char * sbuf = new char [siz]; Pour allouer une gamme de personnages SIZ sur le tas. Cependant, cette approche présente des préoccupations de gestion de la mémoire (par exemple, des fuites de mémoire potentielles), ce qui le rend moins approprié que le vecteur std ::.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3