Spec-Zone.ru › C++

std::basic_streambuf<CharT,Traits>::sputn, std::basic_streambuf<CharT,Traits>::xsputn

std::streamsize sputn( const char_type* s, std::streamsize count );
(1)
protected:
virtual std::streamsize xsputn( const char_type* s, std::streamsize count );
(2)
1) Вызывает xsputn(s, count) наиболее производного класса.
2) Записывает count символов в выходную последовательность из массива символов, на первый элемент которого указывает s. Символы записываются так, как если бы выполнялись повторные вызовы sputc(). Запись прекращается, когда записано count символов или вызов sputc() вернул бы Traits::eof().

Если область записи заполняется (pptr() == epptr()), не указано, вызывается ли фактически overflow() или его действие достигается иным способом.

Параметры

(нет)

Возвращаемое значение

Количество успешно записанных символов.

Примечания

«Достигается иным способом» допускает массовый ввод-вывод без промежуточной буферизации: именно так std::ofstream::write() в некоторых реализациях просто передаёт указатель подходящему системному вызову.

Пример

#include <iostream>
#include <sstream>

int main()
{
    std::ostringstream s1;
    std::streamsize sz = s1.rdbuf()->sputn("This is a test", 14);
    s1 << '\n';
    std::cout << "The call to sputn() returned " << sz << '\n'
              << "The output sequence contains " << s1.str();
    
    std::istringstream s2;
    sz = s2.rdbuf()->sputn("This is a test", 14);
    std::cout << "The call to sputn() on an input stream returned " << sz << '\n';
}

Вывод:

The call to sputn() returned 14
The output sequence contains This is a test
The call to sputn() on an input stream returned 0

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

Отчёт об ошибке Применяется к Опубликованное поведение Правильное поведение
LWG 565 C++98 xsputn() всегда вызывается overflow(), если pptr() == epptr() его фактически не требуется вызывать

См. также

sgetn
вызывает xsgetn()
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/basic_streambuf/sputn

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API