Si desea construir un istringstream de ella, un char * hasta el carácter nulo, o todas las cosas desde un std :: string:
istringstream str(ptr); // char*
istringstream str(other_str); // std::string
Si se habla de querer un puntero en bruto en el buffer de un istream, no puedes hacerlo. Las transmisiones obtienen sus datos bajo demanda si los necesitan, ya sea desde archivos, terminales o bien, opcionalmente almacenando sus cosas en búfer (bueno, no exactamente. Puede usar un strstream
, que acepta un puntero sin procesar y lee/escribe directamente desde allí. es una clase obsoleta - no la use. Tengo suerte de que nunca lo haya hecho). Si todo lo que desea es algo que pueda usar como un puntero, puede usar los iteradores streambuf. Ellos no son realmente punteros sin embargo, por lo que no pueden restar end
de begin
y otras materias:
std::istreambuf_iterator<char> begin(one_istream), end;
while(begin != end)
std::cout << *begin++;
Si se habla de conseguir una cadena de lo que estaba escrito en un stringstream, puede utilizar ostringstream::str
:
ostringstream o;
o << "This is a number: " << 42;
std::string str = o.str(); // str == "This is a number: 42"
de lo contrario, sólo se puede leer en general cosas de una istream
. Es necesario un ostream
, entonces usted puede hacer
stream.write(ptr, N);
stream.write(ptr.c_str(), ptr.c_str() + ptr.size());
para escribir exactamente n caracteres de los bytes que los puntos a STR. También puede escribirlo en la transmisión usando <<
. Escribirá todo hasta el carácter nulo, o todo desde una cadena std ::, pero respetará las marcas de formato, como el ancho del campo:
stream << ptr; // char*
stream << other_str; // everything from std::string
Lo siento; no está del todo claro lo que estás preguntando aquí. ¿Desea poder acceder a una cadena como si fuera una secuencia? ¿Qué está tratando de lograr? – Rob
corrigió la pregunta ahora. – kal
debería tener en cuenta que su código no es válido. no puedes construir un istream desde un istringstream. ¿Qué crees que debería hacer? (obsérvese que las transmisiones no se pueden copiar). –