X-PDF

Функции вывода put и write

Поделиться статьей

Для вывода двоичных данных или отдельного символа можно использовать функцию-компонент put, объявленную в ostream следующим образом:

ostream ostream::put (char ch) .

При объявлении int ch=x . следующие две строки эквивалентны:

cout.put(ch) .

cout &lt .&lt . (char)ch .

Функция-компонент write позволяет вывод больших по размеру объектов:

ostream&amp . ostream::write(signed char* ptr, int n) .

ostream&amp . ostream::write(unsigned char* ptr, int n) .

Функции write выводят n символов (включая любые входящие пустые символы) в двоичном формате. В отличие от строковой вставки, write не прекращает работу, встретив пустой символ.

Например,

int x . char s[12] .

cout.write((char *)&amp .x, sizeof(x)) .

cout.write(s,sizeof(s)) .

пошлет не преобразованное представление х и s на стандартное устройство вывода.

Существует тонкое различие между форматированной операцией &lt .&lt . и неформатированными функциями put и write. Форматированная операция может вызвать очистку связанных потоков и иметь атрибут ширины поля. Неформатированные операции не обладают этими свойствами. Поэтому cout &lt .&lt . a и cout put(a) могут давать разные результаты. Все флаги форматирования применимы к &lt .&lt ., но ни один из них не применим к put или write.

Пример: В файл, открытый в текстовом режиме, дважды записывается одна и та же строка: первый раз – посимвольно . второй – вся строка целиком.

#include &lt .fstream.h&gt .

#include &lt .string.h&gt .

#define n 40

main()

{ int i=0 .

Представленная информация была полезной?
ДА
60.87%
НЕТ
39.13%
Проголосовало: 1536

char str[n]=Записываемая строкаn .

ofstream fstr(ofstream.out) .

while(str[i]!=)

{fstr.put(str[i]) .

cout&lt .&lt .nПозиция маркера записи: &lt .&lt .fstr.tellp() .

i++ .}

fstr.write(str,strlen(str)) .

cout&lt .&lt .nНовая позиция маркера записи: &lt .&lt .fstr.tellp() .

fstr.close() .

}

Результат:

Позиция маркера записи: 1

Позиция маркера записи: 2

… … …

Позиция маркера записи: 19

Позиция маркера записи: 21

Новая позиция маркера записи: 42

При выводе данных в файл, открытый в текстовом режиме, автоматически выполняется преобразование n = CR/LF, т.е. символ новой строки преобразуется в пару символов возврата каретки и перевода строки. При чтении происходит обратное преобразование. Именно поэтому наблюдается “скачок” счетчика: после 19 идет 21. Функция put(), записывающая в файл n, на самом деле помещает в файл два других символа. Функция write() выполняет такое же преобразование, поэтому конечное число счетчика равно 42, а не 41.

Если в данной программе указать не текстовый, а двоичный файл

ofstream fstr(ofstream.out, ios::binary) .

то такого “скачка” счетчика наблюдаться не будет, т.к. не происходит замены символа новой строки в пару символов возврата каретки и перевода строки.


Поделиться статьей
Автор статьи
Анастасия
Анастасия
Задать вопрос
Эксперт
Представленная информация была полезной?
ДА
60.87%
НЕТ
39.13%
Проголосовало: 1536

или напишите нам прямо сейчас:

Написать в WhatsApp Написать в Telegram

ЯТТС-Рекомендации по написанию отчета по учебной и производственной практики-Гостинечное дело

Поделиться статьей

Поделиться статьейПоделиться статьей Автор статьи Анастасия Задать вопрос Эксперт Представленная информация была полезной? ДА 60.87% НЕТ 39.13% Проголосовало: 1536


Поделиться статьей

ЮУрГУ-вопросы

Поделиться статьей

Поделиться статьейПоделиться статьей Автор статьи Анастасия Задать вопрос Эксперт Представленная информация была полезной? ДА 60.87% НЕТ 39.13% Проголосовало: 1536


Поделиться статьей

ЮУГУ-Отчет_ПП-Машины непрерывного транспорта

Поделиться статьей

Поделиться статьейПоделиться статьей Автор статьи Анастасия Задать вопрос Эксперт Представленная информация была полезной? ДА 60.87% НЕТ 39.13% Проголосовало: 1536


Поделиться статьей

ЮУГУ- Курсовой проект по электронике

Поделиться статьей

Поделиться статьейПоделиться статьей Автор статьи Анастасия Задать вопрос Эксперт Представленная информация была полезной? ДА 60.87% НЕТ 39.13% Проголосовало: 1536


Поделиться статьей

ЮУГУ-ВКР-Обеспечение требований охраны труда на рабочем месте слесаря-ремонтника 5 разряда

Поделиться статьей

Поделиться статьейПоделиться статьей Автор статьи Анастасия Задать вопрос Эксперт Представленная информация была полезной? ДА 60.87% НЕТ 39.13% Проголосовало: 1536


Поделиться статьей

или напишите нам прямо сейчас:

Написать в WhatsApp Написать в Telegram
Заявка
на расчет