Maison  >  Article  >  développement back-end  >  Comment réinitialiser efficacement un Stringstream en C ?

Comment réinitialiser efficacement un Stringstream en C ?

DDD
DDDoriginal
2024-11-04 19:32:01346parcourir

How to Effectively Reset a Stringstream in C  ?

Réinitialiser efficacement un flux de chaînes

En C, les flux de chaînes sont un outil précieux pour manipuler et analyser les chaînes. Pour réinitialiser un flux de chaînes, les développeurs utilisent la méthode str() pour effacer la chaîne sous-jacente. Cependant, cette approche peut ne pas réinitialiser complètement le flux.

L'étude de cas

Considérez l'extrait de code suivant :

<code class="cpp">stringstream parser;

parser << 5;
short top = 0;
parser >> top;
parser.str(""); // Attempting to reset parser

parser << 6; // Fails to insert 6 into parser
short bottom = 0;
parser >> bottom;</code>

L'intention est pour réinitialiser le flux de l'analyseur et lui attribuer une nouvelle valeur. Cependant, de manière inattendue, le code ne parvient pas à insérer 6 dans l'analyseur.

Comprendre l'erreur

La racine du problème réside dans la réinitialisation incomplète. La méthode str() efface uniquement la chaîne sous-jacente, tandis que les indicateurs d'erreur (tels que eof et fail) restent définis. Les opérations ultérieures, comme la lecture du flux, échoueront en raison de ces indicateurs.

Technique de réinitialisation appropriée

Pour réinitialiser efficacement un flux de chaînes, il est crucial non seulement d'effacer la chaîne mais réinitialise également les indicateurs d'erreur. Ceci peut être réalisé en utilisant la méthode clear() :

<code class="cpp">parser.str( std::string() );
parser.clear();</code>

En appelant à la fois str() et clear(), la chaîne est réinitialisée à une chaîne vide et tous les indicateurs d'erreur sont effacés, garantissant ainsi que les erreurs ultérieures les opérations réussiront.

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