Программирование >>  Расширенная версия языка c++ 

1 ... 132 133 134 [ 135 ] 136 137 138 ... 227


Не пытайтесь выполнить эту функцию! void func()

as rmov bp, sp ); asm { push ax ) ; asm ( mov cl, 4 ); ...


Для успешного использования встроенного ассемблера вы должны быть опытным программистом на языке ассемблера. Кроме этого, нужно тщательно изучить техническую документацию на ваш компилятор.


; :- Г I. i I ff I- I .1-я i-,)f ,

Изучите те разделы технической документации на ваш компилятор, которые относятся к спецификаторам сборки и интерфейсу с ассемблером.

13.7. Массивы

в качестве объектов ввода/вывода

Помимо ввода/вывода на экран и в файл, в C++ поддерживается целый ряд функций, в которых в качестве устройств для ввода и вывода используются массивы. Хотя ввод/вывод с использованием массивов (array-based I/O) в C++ концептуально перекликается с аналогичным вводом/выводом в С (в особенности это касается функций sscanf() и sprintfO языка С), ввод/вывод с использованием массивов в С++ более гибкий и полезный, поскольку он позволяет интегрировать в него определенные пользователем типы данных. Хотя охватить все аспекты массивов в качестве объектов ввода/вывода невозможно, здесь рассматриваются их наиболее важные и часто используемые свойства.

Важно понимать, что для реализации ввода/вывода с использованием массивов тоже нужны потоки. Все, что вы узнали о вводе/выводе C++ из глав 8 и 9 применимо и к вводу/выводу с использованием массивов. При этом, чтобы узнать о всех достоинствах массивов в качестве объектов ввода/вывода, вам следует познакомиться с несколькими новыми функциями. Эти функции предназначены для связывания нужного потока с некоторой



412 Самоунтель C++

областью памяти. После того как эта операция выполнена, весь ввод/вывод производится посредством тех самых функций для ввода и вывода, о которых вы уже знаете.

Перед тем как начать пользоваться массивами в качестве объектов вво-да/в1вода, необходимо удостовериться в том, что в вашу программу включен заголовок геап1>. В этом заголовке определяются классы istrstream, ostrstreara и strstream. Эти классы образуют, :оптветственно, основанные на использовании массивов потоки для ввода, вывода и ввода/вывода. Базовым для этих классов является класс ios, поэтому все функции и манипуляторы классов istream еат еаш имеются также и в классах istrstream, ostrstream и strstream.

Для вывода в символьный массив используйте следующую основную форму конструктора класса ostrstream:

ostrstream вывода (char *буфер, streamslze pasuap,

openmode режим = ios: : out) ;

Здесь вывода - это поток, который связывается с массивом, заданным через указатель буфер. Параметр размер определяет размер массива. Параметр режим по умолчанию обычно настроен на обычный режим вывода, но вы можете задать любой, определенный в классе ios, флаг режима

вывода. (За подробностями обращайтесь к главе 9.)

После того как массив открыт для вывода, символы будут выводиться в массив вплоть до его заполнения. Переполнения массива произойти не может. Любая попхтка переполнения массива приведет к ошибке ввода/вывода. Для определения количества записанных в массив символов используйте приведенную ниже функцию-член pcount(): . .

int pcountO ;

Функция должна вызываться только в связи с потоком и возвращает она число символов, записанных в массив, включая нулевой символ завершения.

Чтобы открыть массив для ввода из него, используйте следующую форму конструктора класса istrstream:

istrstream м лвода (const char *буфвр) ;

Здесь буфер - это указатель на массив, из которого будут вводиться символы. Поток ввода обозначен через поток ввода. При считывании входной информации из массива, функция eof() возвращает истину при достижении конца массива.

Чтобы открыть массив для ввода/вывода, используйте следующую форму

конструктора класса strstream:

strstream (char

openmode режим = ios : : in : : out) ;




1. В этом простом примере показано, как открыть массив для вывода и записать в него данные:

Короткий пример вывода в массив #include <iostreani> tinclude <strstream>

using namespace

int mainO

cha П255] ; буфер для вывода

ostrstream ostr(buf, sizeof tof) ; открытие массива для вывода

ost од/вывод через массивы работает с потоками\п ;

ost точно так же, как при обычном вводе/выводе\ 100; ost < 123.23 \п;

можно также использовать манипуляторы ost he 10< ; или флаги формата ostr.setf(ios::scientific); ostr 123.23 \n;

ostr ends; ... Ду.р I ; j .

вывод на экран полученной строки cout buf;

return 0;

Здесь одвывод - это пото ывода, для которого в качестве объекта ввода/вывода через указатель буфер задан массив длиной в размер символов.

Важно помнить, что все описанные ранее функции ввода/вывода работают и с массивами, включая функции ввода/вывода двоичных файлов и функции произвольного доступа.

. ]-.;г-н \ 1- . 11 ..( ч.*

;i- .liXi,x,:. - ч - >

т1 л .. - .ir,

Применение потоковых классов дл льных массивов резко осуждается стандартом Standard C++. Это означает, что хотя сейчас потоковые классы для символьных массивов достаточно широко распространены, в будущих версиях языка С++ они могут не поддерживаться. Для решения тех же задач, для которых предназначены символьные массивы, стандартом Standard C+ + рекомендуются классы-контейнеры, описанные в главе 14.



1 ... 132 133 134 [ 135 ] 136 137 138 ... 227

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика