Бьерн Страуструп - Язык программирования С++. Главы 8-10 - Строковые потоки

ОГЛАВЛЕНИЕ


10.5.2 Строковые потоки

Как было показано, поток может быть привязан к файлу, т.е. массиву символов, хранящемуся не в основной памяти, а, например, на диске. Точно так же поток можно привязать к массиву символов в основной памяти.
Например, можно воспользоваться выходным строковым потоком ostrstream для форматирования сообщений, не подлежащих немедленной печати:
     char* p = new char[message_size];
     ostrstream ost(p,message_size);
     do_something(arguments,ost);
     display(p);
С помощью стандартных операций вывода функция do_something может писать в поток ost, передавать ost подчиняющимся ей функциям и т.п. Контроль переполнения не нужен, поскольку ost знает свой размер и при заполнении перейдет в состояние, определяемое fail(). Затем функция display может послать сообщение в "настоящий" выходной поток. Такой прием наиболее подходит в тех случаях, когда окончательная операция вывода предназначена для записи на более сложное устройство, чем традиционное, ориентированное на последовательность строк, выводное устройство. Например, текст из ost может быть помещен в фиксированную область на экране. Аналогично, istrstream является вводным строковым потоком, читающим из последовательности символов, заканчивающейся нулем:
     void word_per_line(char v[], int sz)
     /*
 печатать "v" размером "sz" по одному слову в строке
     */
     {
        istrstream ist(v,sz);  // создать istream для v
        char b2[MAX];          // длиннее самого длинного слова
        while (ist>>b2) cout <<b2 << "\n";
      }
Завершающий нуль считается концом файла. Строковые потоки описаны в файле <strstream.h>.