2014-10-17 115 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.