Maison >développement back-end >C++ >Comment puis-je créer des tableaux de taille dynamique en C pour gérer des fichiers de taille inconnue ?

Comment puis-je créer des tableaux de taille dynamique en C pour gérer des fichiers de taille inconnue ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-14 20:59:021039parcourir

How Can I Create Dynamically Sized Arrays in C to Handle Files of Unknown Size?

Tableaux dimensionnés dynamiquement en langage C

Considérez le code C suivant :

<br>int taille = 0;<br>int n = 0;<br>FILE* photo;</p>
<p>photo = fopen("test.jpg", "r");<br>fseek(photo, 0, SEEK_END);<br>siz = ftell(photo);</p>
<p>char Sbuf[taille]; // Erreur : tableau de longueur variable<br>fseek(picture, 0, SEEK_SET);<br>while (!feof(picture)) {</p>
<pre class="brush:php;toolbar:false">n = fread(Sbuf, sizeof(char), siz, picture);
// do stuff with the buffer
// memset(Sbuf, 0, sizeof(Sbuf));

}

Dans ce code, le but est de lire le contenu d'un fichier dans un tampon, mais la taille du tampon est inconnue jusqu'à l'ouverture du fichier et sa taille est déterminée. Cependant, le langage C ne permet pas de déclarer des tableaux de longueurs variables.

Alternatives aux tableaux de longueur variable

Pour résoudre ce problème, il existe plusieurs alternatives :

  • std::vector : utilisez la bibliothèque de modèles standard C (STL) pour créer un fichier dynamique array.
    <br>std::vector<char> Sbuf;</li></ul>
    <p>Sbuf.push_back(someChar);<br>

    • Allocation dynamique : utilisez le nouvel opérateur pour allouer mémoire au moment de l'exécution pour un array.
      <br>char* Sbuf = new char[siz];</li></ul>
      <p>delete [] Sbuf; // Désallouer la mémoire une fois terminé<br>

      Considérations

      Bien que l'allocation dynamique fournisse un moyen de créer un tableau de taille variable, elle est livrée avec quelques mises en garde :

      • L'allocation de mémoire doit être correctement gérée pour éviter la mémoire fuites.
      • Les opérations arithmétiques ne peuvent pas être effectuées directement sur l'index du tableau, car il s'agit d'un pointeur.
      • Différents compilateurs peuvent implémenter différemment des tableaux de longueur variable, ce qui entraîne des problèmes de compatibilité.

      Conclusion

      Bien que les tableaux de longueur variable ne soient pas pris en charge dans C, il existe plusieurs approches alternatives pour créer des tableaux dynamiques pouvant s'adapter à la taille des données à stocker. Il est essentiel de choisir l'option la plus appropriée en fonction des exigences et contraintes spécifiques du projet.

      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!

Déclaration:
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