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>.


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.