2014-10-17 136 views
1

我正在尋找乾淨的STL方式來使用現有的C緩衝區(char *和size_t)作爲字符串流。我寧願使用STL類作爲基礎,因爲它具有內置的安全防護和錯誤處理。使用字符數組作爲字符串流緩衝區

注:我不能使用額外的庫(否則我會用QTextStream

+0

你只是想初始化字符串流在通過P0W答案,或者你想在的意義上「使用」緩衝告訴stringstream使用它作爲它的* internal *緩衝區(所以,它會,例如,寫入新的信息)?我認爲後者對於STL來說是不可能的,因爲你不能控制的重新分配等。因此,STL可能不會提供一個接口來完成它。 – Oguk 2014-10-17 06:13:38

回答

6

您可以std::stringbuf::pubsetbuf嘗試。它調用setbuf,但它的實現定義了它是否會起作用。如果是這樣,它會用char數組替換底層的字符串緩衝區,而不會複製像它通常那樣的所有內容。值得一試,IMO。

與此代碼測試:

std::istringstream strm; 
char arr[] = "1234567890"; 

strm.rdbuf()->pubsetbuf(arr, sizeof(arr)); 
int i; 
strm >> i; 
std::cout << i; 

Live demo.