public member function
<streambuf> <iostream>

std::basic_streambuf::sgetn

streamsize sgetn (char_type* s, streamsize n);
獲取字元序列
呼叫受保護的虛成員函式 xsgetn,其引數與 sn 相同。

basic_streambuf 中的 xsgetn 的預設定義會從 *受控輸入序列* 中檢索字元,並將它們儲存在 s 指向的陣列中,直到提取了 n 個字元或到達序列末尾為止。

引數

s
指向要複製字元序列的陣列的指標。
成員型別 char_type流緩衝區(第一個類模板引數)中字元的型別。
n
要檢索的最大字元數。
這應該是一個非負值。
streamsize 是一個帶符號整型。

返回值

複製的字元數。
streamsize 是一個帶符號整型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// read a file into buffer - sgetn() example
#include <iostream>     // std::cout, std::streambuf, std::streamsize
#include <fstream>      // std::ifstream

int main () {
  char* contents;
  std::ifstream istr ("test.txt");

  if (istr) {
    std::streambuf * pbuf = istr.rdbuf();
    std::streamsize size = pbuf->pubseekoff(0,istr.end);
    pbuf->pubseekoff(0,istr.beg);       // rewind
    contents = new char [size];
    pbuf->sgetn (contents,size);
    istr.close();
    std::cout.write (contents,size);
  }
  return 0;
}

此示例使用其 *流緩衝區* 將整個檔案讀入緩衝區,然後將其寫入標準輸出。

資料競爭

修改 s 指向的陣列中最多前 n 個字元。
修改*流緩衝區*物件。
對同一陣列或同一流緩衝區物件的併發訪問可能會引入資料爭用。

異常安全

基本保證:如果丟擲異常,則流緩衝區處於有效狀態(這也適用於標準派生類)。

無效引數會導致未定義行為

另見