public member function
<streambuf> <iostream>

std::streambuf::sgetc

int sgetc();
Get current character
Returns the character at the current position of the controlled input sequence, without modifying the current position.

请注意,虽然相似,但以下成员函数的行为有所不同
成员函数,逐个字符打印字符串的内容描述
sgetc()返回当前位置的字符。
sbumpc()返回当前位置的字符,并将当前位置推进到下一个字符。
snextc()将当前位置推进到下一个字符,并返回该下一个字符。

Internally, the function calls the virtual protected member underflow if there are no read positions available at the get pointer (gptr). Otherwise, the function uses the get pointer (gptr) directly, without calling virtual member functions.

其行为等同于如下实现:
1
2
3
4
int sgetc() {
  if ( (!gptr()) || (gptr()==egptr()) ) return underflow();
  else return *gptr();
}

参数



返回值

受控输入序列当前位置的字符,类型为 int
如果受控输入序列中没有更多字符可供读取,则函数返回文件结束值(EOF)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// show file content - sgetc() example
#include <iostream>     // std::cout, std::streambuf
#include <fstream>      // std::ifstream
#include <cstdio>       // EOF

int main () {
  std::ifstream istr ("test.txt");
  if (istr) {
    std::streambuf * pbuf = istr.rdbuf();
    do {
      char ch = pbuf->sgetc();
      std::cout << ch;
    } while ( pbuf->snextc() != EOF );
    istr.close();
  }
  return 0;
}

This example shows the content of a file on screen, using the combination of sgetc and snextc to read a file.

数据竞争

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

异常安全

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

另见