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

From cppreference.com
< cpp‎ | io‎ | basic streambuf

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) Calls `xsputn(s, count)` of the most derived class.
2) Writes `count` characters to the output sequence from the character array whose first element is pointed to by `s`. The characters are written as if by repeated calls to sputc(). Writing stops when either `count` characters are written or a call to sputc() would have returned Traits::eof().

If the put area becomes full (pptr() == epptr()), this function may call overflow(), or achieve the effect of calling `overflow()` by some other, unspecified, means.

### Parameters

(none)

### Return value

The number of characters successfully written.

### Notes

"achieving effects of `overflow()` by unspecified means" permits bulk I/O without intermediate buffering: that's how std::ofstream::write simply passes the pointer to the POSIX `write()` system call in some implementations of iostreams

### Example

Run this code

    #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';
    }

Output:

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

### See also

sgetn | invokes xsgetn() (public member function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/io/basic_streambuf/sputn&oldid=92607"