2013-05-03 38 views
0

即時通訊目前正致力於在其上使用的AC庫,需要從我身邊 例如回調定義爲這個實現的回調C++應用程序:C++流入char數組?

int onWrite(char *what, char *buffer, size_t size, off_t offset); 

我的std ::集需要被格式化並寫入緩衝區和照顧的大小和偏移,其中大小是緩衝區的大小和偏移量多少字節已經處理

是有一個C++的方式,我可以類似於流進緩衝區? 我想是這樣的:

SomeSTLStandardStream stream(buffer,size); 
stream.ignore(offset); // to drop the first n offset bytes 
for(it=dataset.begin();it!=dataset.end() && stream.buffer_avail()>0;it++) 
    stream << *it << "|"; // format csv like for example 

的核心問題,我有是:是否有一個標準的C++的方式來攫取只是格式化/流傳輸數據的切片,並寫入給定的緩衝區?

如果不是生病了實現我自己

我也看了一下字符串流,但它似乎沒有完全適合我的需求導致其用,而不是我的 自己的寫緩衝區,我不知道有多少字節已經被寫入它也和這樣的....

THX

+0

有'的std :: ostrstream';它已被棄用,但它可能適合您的方案。 – Angew 2013-05-03 12:19:53

回答

1

您可以通過使用std::stringstream::pubsetbuf分配內存和字符串流包裝它:

int main() 
{ 
    char buf[1024]; 

    std::stringstream stream; 

    stream.rdbuf()->pubsetbuf(buf, sizeof(buf)); 

    stream<< "Hello " << "World " << std::endl; 

    std::string str; 
    std::getline(stream, str); 
    std::cout << str << std::endl; 

    //... 
} 

閱讀std::stringstreamstd::basic_streambufstd::basic_stringbuf

+0

我已經有了一看pubsetbuf。我有這個問題是,我不知道是否或有多少字節已經真正寫入我的buf。例如,如果你設置你的緩衝區大小爲char buf [3] = {'\ 0'};與pubsetbuf(buf,2);然後做rdbuf() - > sputn(「ab」,2); rdbuf() - > sputn( 「BB」,2);雙方sputn的返回值會發出信號,一切工作,但只有第一個已實際寫入我的BUF(不知道在哪裏,第二已經?) - 所以我怎麼知道:什麼時候停止書面方式?並且有多少個字節已經寫入了我的buf? – 2013-05-07 19:18:12