public member function
<streambuf> <iostream>

std::streambuf::sputc

int sputc (char c);
在当前写入位置存储字符并增加写入指针
字符 c 被存储在受控输出序列的当前位置,然后将位置指示器前进到下一个字符。

在内部,如果写入指针 (pptr) 没有可用的写入位置,则函数会调用虚保护成员 overflow。否则,函数直接使用写入指针 (pptr),而无需调用虚成员函数。

其行为等同于如下实现:
1
2
3
4
5
6
int sputc(char c) {
  if ( (!pptr()) || (pptr()==epptr()) ) return overflow(c);
  *pptr()=c;
  pbump(1);
  return c;
}

参数

c
要写入的字符。

返回值

成功时,将写入的字符作为 int 类型的值返回。
否则,它返回文件结束值 (EOF) 来表示失败。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// typewriter - sputc() example
#include <iostream>     // std::cin, std::cout, std::streambuf
#include <fstream>      // std::ofstream

int main () {
  char ch;
  std::ofstream ostr ("test.txt");
  if (ostr) {
    std::cout << "Writing to file. Type a dot (.) to end.\n";
    std::streambuf * pbuf = ostr.rdbuf();
    do {
      ch = std::cin.get();
      pbuf->sputc(ch);
    } while (ch!='.');
    ostr.close();
  }

  return 0;
}

此示例代码将每个字符写入文件,直到出现句点字符 (.)。

数据竞争

修改*流缓冲区*对象。
同时访问同一*流缓冲区*对象可能会导致数据竞争。

异常安全

基本保证:如果抛出异常,则流缓冲区处于有效状态(这也适用于标准派生类)。

另见