J'ai besoin de lire un fichier et d'envoyer le texte à une chaîne afin que je puisse l'analyser. Cependant, le programme ne saura pas exactement combien de temps le fichier est, alors que ferais-je si je voulais utiliser Remarque: p> fgets () code> ou y a-t-il une meilleure alternative?
4 Réponses :
allouer un tampon (celui que quelque chose comme: p> si la ligne suivante A 10 caractères avant la nouvelle ligne, alors STR détiennera ces 10 caractères, la nouvelle ligne et le terminateur null. p> EDIT STRUT>: Juste au cas où il y a une confusion, je n'ai pas fait t Invitez ce qui précède de sonner comme si l'espace supplémentaire dans le tampon n'est pas utilisé. Je voulais seulement illustrer que vous n'avez pas besoin de savoir à l'avance combien de temps votre chaîne va être, tant que vous pourrez mettre une longueur maximale dessus. P> p> STR code> pointe vers) et transmettez la taille du tampon pour
num code>. L'espace réel adopté ne sera que la longueur du texte lu par
fgets code>.
Comment ça? À moins que vous réaffectiez le tampon, tout espace supplémentaire est toujours utilisé.
Je parle de l'espace dans le tampon, pas de l'espace en mémoire. En outre, la question de l'OP n'était pas sur la manière de sauvegarder la mémoire.
N'oubliez pas que fgets () code>
lit une ligne à la fois, sous réserve d'avoir suffisamment d'espace.
Les humains écrivent rarement des lignes plus longtemps que ... 80, 256, choisissez un numéro ... Personnages. POSIX suggère une longueur de ligne de 4096. Donc, j'utilise habituellement: p> si quelqu'un craignait que quelqu'un puisse fournir plus de 4 000 données dans une seule ligne (et une machine Le fichier généré, tel que HTML ou JSON, pourrait contenir cela), vous devez alors décider quoi faire ensuite. Vous pouvez faire l'un des éléments suivants (et il y a probablement d'autres options que je n'ai pas mentionnées): p>
getline () code>
qui est disponible sur Linux. Il fait une allocation de mémoire pour vous. LI>
ol> p>
Si vous n'êtes pas sur un système POSIX et que vous n'avez pas getline code> disponible, consultez Domaine public de Chuck Falconer
Ggets code> /
qui cultivent de manière dynamique un tampon pour consommer une ligne entière. (Ce lien semble être en panne en ce moment, mais archive.org a une copie .) p> FGGETS code> Fonctions
Votre titre suggère que vous souhaitez utiliser Fgets mais que le texte implique que vous recherchez des alternatives. Qu'est-ce qui vous a fait aller pour les fgets en premier lieu ..?