Si vous voulez construire un istringstream de lui, un char * jusqu'au caractère nul, ou toutes les choses d'un std :: string:
istringstream str(ptr); // char*
istringstream str(other_str); // std::string
Si vous parlez de vouloir un pointeur brut en le tampon d'un istream, vous ne pouvez pas le faire. Les flux obtiennent leurs données à la demande s'ils en ont besoin, soit à partir de fichiers, de terminaux, soit en tamponnant leurs données (bien, pas exactement) Vous pouvez utiliser un strstream
, qui accepte un pointeur brut et lit/écrit directement à partir de cela. c'est une classe obsolète - ne l'utilisez pas, j'ai de la chance de ne l'avoir jamais fait). Si tout ce que vous voulez est quelque chose que vous pouvez utiliser comme un pointeur, vous pouvez utiliser des itérateurs streambuf. Ils ne sont pas vraiment des pointeurs, donc vous ne pouvez pas soustraire end
de begin
et d'autres étoffes:
std::istreambuf_iterator<char> begin(one_istream), end;
while(begin != end)
std::cout << *begin++;
Si vous parlez de faire une chaîne de ce qui a été écrit dans un stringstream, vous pouvez utiliser ostringstream::str
:
ostringstream o;
o << "This is a number: " << 42;
std::string str = o.str(); // str == "This is a number: 42"
Sinon, vous ne pouvez généralement lire choses à partir d'un istream
. Vous avez besoin d'un ostream
, alors vous pouvez faire
stream.write(ptr, N);
stream.write(ptr.c_str(), ptr.c_str() + ptr.size());
d'écrire exactement N caractères des octets que les points str. Vous pouvez également l'écrire dans le flux en utilisant <<
. Il va écrire tout le caractère nul, ou tout d'un std :: string, mais respectera les drapeaux de mise en forme, comme la largeur du champ:
stream << ptr; // char*
stream << other_str; // everything from std::string
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 flux? Qu'est-ce que vous essayez d'accomplir? – Rob
a édité la question maintenant. – kal
Je dois noter que votre code n'est pas valide. vous ne pouvez pas construire un istream à partir d'un istringstream. que pensez-vous qu'il devrait faire (note, les flux ne peuvent pas être copiés). –