Pourquoi fgets Beats fscanf pour une lecture sécurisée des fichiers en C

11

Arrêtez d’utiliser fscanf pour lire des fichiers texte. C’est un piège. À moins que vos données ne soient parfaitement formatées jusqu’au dernier espace, fscanf s’étouffera, se désalignera et vous laissera un débogage un cauchemar. Le chemin fiable ? Ouvrez avec le mode r, utilisez fgets pour récupérer des lignes entières et analysez ensuite les éléments dont vous avez besoin.

Voici un moyen simple de lire un fichier et de vider son contenu à l’écran sans faire planter votre système.

La logique ici est d’une simplicité trompeuse. fgets lit une ligne, jusqu’à 1 000 caractères dans ce tampon, et renvoie NULL uniquement lorsqu’il atteint le marqueur de fin de fichier. Il s’imprime directement sur la sortie standard via printf. Vous remarquez l’absence de « \n » dans la chaîne de format « printf » ? C’est intentionnel. fgets ajoute automatiquement le caractère de nouvelle ligne à la fin de la chaîne qu’il lit. Si vous ajoutez votre propre « \n », vous obtenez un double interligne. Plus important encore, si une ligne comporte plus de 1 000 caractères, fgets n’ajoutera pas de nouvelle ligne. Vous pouvez détecter cette lecture incomplète en recherchant le « \n » manquant, une astuce pratique si vous avez affaire à des données mal formées.

“Utilisez fgets pour lire chaque ligne, puis analysez les éléments dont vous avez besoin.”

Il existe une erreur critique qui fait trébucher même les développeurs chevronnés. Ne tapez pas fclose comme close. Le compilateur ne le détectera pas. La fonction « fermer » existe, et pour les petits scripts qui ouvrent et ferment un fichier une ou deux fois seulement, cela peut sembler fonctionner correctement. C’est un mensonge.

Si vous exécutez ceci dans une boucle, « close » ne parvient pas à libérer correctement les ressources du fichier sous-jacent. Finalement, votre programme manque de descripteurs de fichiers ou d’espace mémoire disponibles et plante gravement. « fclose » est la seule façon correcte de fermer la porte. « close » est un raccourci qui mène à une brique. Tenez-vous-en à la bibliothèque standard. Gardez vos tampons vérifiés. Ne laissez pas une faute de frappe ronger votre mémoire.