久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1750|回復: 0
收起左側

字節流類

[復制鏈接]
ID:107189 發表于 2016-3-5 18:16 | 顯示全部樓層 |閱讀模式


字節流可直接與內存而不是與文件或標準輸出一起工作。我們可以用與標準輸出同樣的格式,操作內存里的數據(字節)。如果我們想把數據放入字節流,可以建立一個ostrstream對象;如果想從字節流中提取數據,就建立一個istrstream對象。

12.3.1 輸入流
   istrstream類支持一個字符數組作為源的輸入流。在構造istrstream對象前,必須存在一個字符數組,而且這個數組中已經填充了我們想要提取的字符。下面是兩個構造函數的原型:
   istrstream::istrstream(char* buf);
   istrstream::istrstream(char* buf, int size);
   第一個構造函數取一個指向以"{content}"作為結尾符的字符數組的指針,我們可以提取字節直至遇到"{content}"為止。第二個構造函數還需要這個數組的大小,但不需要數組包含字符串的結尾符"{content}",我們可以一直提取字節到buf[size-1],而不管是否遇到"{content}"。
       
程序段         程序12-17
#include "strstrea.h"
//使用strstream要包含頭文件strstrea.h
//這個文件名很奇怪,這是因為DOS文件命名規則的限制。

void main()
{
  int n;
  float f;
  char buf[80];
  istrstream arg("3.14159 hello");
  arg>>n>>f>>buf;
  cout<<"n="<<n<<endl;
  cout<<"f="<<f<<endl;
  cout<<"buf="<<buf<<endl;
}
   程序的運行結果是:
   n=3
   f=0.14159
   buf=hello
   在程序中變量n提取到的是3,變量f提取到的是0.14159,這說明抽取不僅依賴于空白的分隔符,還依賴于提取的數據類型。同時,程序中也會出現前面提到的問題。例如:
   istrstream arg("3.14159 hello world!");
的運行結果并不是想象中那樣,把"hello world!"被抽取到buf中,僅僅是hello被抽取。
   如果該輸入流定義為:
   istrstream arg("3.14159 hello",10);
強制限定字符數組元素個數為10,則程序運行結果為:
   n=3
   f=0.14159
   buf=he



12.3.2 輸出流
   ostrstream類支持一個字符數組作為數據傳輸目的地的輸出流,它可以使用我們為它申請的存儲空間,這時字節在內存中被格式化;也可以使用自動分配的存儲空間。
   我們為ostrstream申請存儲空間的方法是通過ostrstream有參的構造函數:
   ostrstream(char*, int, int=ios::out);
   第一個參數是緩沖區的指針,第二個參數是緩沖區的大小,第三個參數是打開模式。如果是缺省的模式,則從緩沖區頭部開始添加新的字符;如果打開模式是ios::ate或ios::app,則從緩沖區中的字符串的結尾符處開始添加新的字符 (結尾符不后移,只是被簡單地覆蓋,下面程序中os<<ends的作用就是在buf后面加上結尾符)。

下面是一個使用istrstream的例子:
程序段         程序12-18
#include "strstrea.h"
void main()
{
  int n;
  float f;
  char buf[80];
  ostrstream os(buf,80);
  cin>>n>>f;
  os<<"n="<<n<<endl;
  os<<"f="<<f<<endl;
  os<<ends;
  cout<<buf;
}
   程序的運行結果是:
   n=3
   f=0.14159
   如果使用自動分配存儲空間的方法,則使用無參的構造函數:
   ostrstream os;
   這時對象os在堆中分配一塊存儲空間,并自己維護。當用戶輸入不斷增加,原存儲塊不夠用時,它可以再分配更多的存儲空間。用戶可以通過調用成員函數rdbuf()返回緩沖區指針,以訪問緩沖區的內容。

ostrstream類支持一個字符數組作為數據傳輸目的地的輸出流,它可以使用我們為它申請的存儲空間,這時字節在內存中被格式化;也可以使用自動分配的存儲空間。
   我們為ostrstream申請存儲空間的方法是通過ostrstream有參的構造函數:
   ostrstream(char*, int, int=ios::out);
   當插入操作超過申請的存儲空間的小時,流的bad標志會置位。
   如果使用自動分配存儲空間的方法,則使用無參的構造函數:
   ostrstream os;
   當不知道數據需要多少空間時,這是一種很好的方法。這時對象os在堆中分配一塊存儲空間,并自己維護。當用戶輸入不斷增加,原存儲塊不夠用時,如果有必要,它將移動存儲塊以分配更多的存儲空間。用戶可以通過調用成員函數rdbuf()返回緩沖區指針,以訪問緩沖區的內容。但是有一個問題:當空間不夠,流對象自己移動存儲塊以分配更多空間時,原來的緩沖區指針已經失效,但是用戶是不知道的,因為流對象自己負責維護存儲空間。ostrstream處理這個問題的方法是"凍結"自己。用戶通過str()函數返回指向輸出流內容的字符數組的指針,并將自己"凍結"。用戶不能再它添加字符,ostrstream對象也不再負責存儲空間的自動釋放,必須由用戶自己清理存儲器:
   delete os.str();
   如果想添加更多的字符,一般的做法是新建一個ostrstream,將舊的流灌入新流中,并向新流添加字符。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 毛片在线免费播放 | aaa一级片| 免费一区二区视频 | 丁香婷婷激情 | 日本亚洲天堂 | 麻豆av片 | 在线观看亚洲精品 | 人人爽夜夜爽 | 久久综合热 | 永久免费看片在线播放 | 在线综合网 | 激情综合久久 | 黄色天堂 | 国产黄色精品 | 99cao| 一级片观看 | 成人精品在线观看 | 黄色大片在线免费观看 | 日韩大片在线观看 | 少妇视频在线观看 | 国产一级片在线播放 | 中国黄色一级片 | 女人av在线 | 久久九九精品 | 99视频| 亚洲专区一区 | 日本乱轮视频 | 精品国产乱码久久久久久影片 | 他揉捏她两乳不停呻吟动态图 | 中文字幕国产视频 | 亚洲国产福利 | 日本黄色免费看 | 国产精品久久久久久中文字 | 1024日韩 | 免费av片 | 国模一区二区 | 在线视频日韩 | 欧美一级黄色录像 | 在线观看视频一区二区三区 | 国产99在线| 日韩成人精品一区二区 |