De façon optimale pour obtenir une chaîne de caractères ou un char* dans un istream?
Quelle est la manière la plus optimale pour obtenir une chaîne de caractères ou char* pointeur dans un istream.
Je veux faire ce qui suit
std::string a = "abc..";
//I know this can be done, not sure if this is most efficient
//and not sure about char* pointers
std::istringstream istr (a);
...
foo (istr);
void foo(std::istream& is) {
}
- Désolé, ce n'est pas tout à fait clair ce que vous demandez ici. Voulez-vous être en mesure d'accéder à une chaîne comme s'il s'agissait d'un ruisseau? Qu'essayez-vous de réaliser?
- édité à la question maintenant.
- il est à noter que votre code n'est pas valide. vous ne pouvez pas construire un istream à partir d'un istringstream. que pensez-vous qu'il doit faire (à noter que les flux ne peut pas être copié).
- édité mon cas d'utilisation, et je pense que je pourrais utiliser up_cast si je voulais utiliser istringstream à istream
Vous devez vous connecter pour publier un commentaire.
Si vous voulez construire un istringstream de lui, un char* jusqu'à que le caractère nul, ou toutes les choses à partir d'un std::string:
Si vous parlez de vouloir un pointeur brut dans le tampon d'un istream, vous ne pouvez pas le faire. Les flux d'obtenir leurs données sur demande si ils en ont besoin, soit à partir de fichiers, des terminaux ou d'autre, éventuellement mise en mémoire tampon leurs trucs (enfin, pas tout à fait exact. Vous pouvez utiliser un
strstream
, qui accepte un pointeur brut et des lectures/écritures directement à partir de cela. Mais il est déconseillé de classe - ne l'utilisez pas. J'ai de la chance je ne l'ai jamais fait). Si tout ce que vous voulez, c'est quelque chose que vous pouvez utiliser un peu comme un pointeur, vous pouvez utiliser streambuf itérateurs. Ils ne sont pas vraiment des pointeurs, donc vous ne pouvez pas soustraireend
debegin
et d'autres articles:Si vous parlez d'obtenir une chaîne de caractères de ce qui a été écrit dans un stringstream, vous pouvez utiliser
ostringstream::str
:Sinon, vous ne pouvez généralement lire choses à partir d'un
istream
. Vous avez besoin d'unostream
, alors vous pouvez fairepour écrire exactement N caractères à partir de la octets str points. Vous pouvez l'écrire dans le flux à l'aide
<<
trop. Il va écrire à tout le caractère null, ou tout à partir d'une std::string, mais respectera mise en forme de drapeaux, comme la largeur de champ:Cela fonctionne:
Et depuis istringstream est un istream, vous serez en mesure d'utiliser votre objet, est comme un istream.