将原始字节数组读入std :: string

时间:2010-12-23 16:57:41

标签: c++ string

我一直想知道以下问题:假设我有一个C样式函数将原始数据读入缓冲区

int recv_n(int handle, void* buf, size_t len);

我是否可以直接将数据读入std:stringstringstream而无需分配任何时间缓冲区?例如,

std::string s(100, '\0');
recv_n(handle, s.data(), 100);

我猜这个解决方案有一个未定义的结果,因为,afaik,string::c_strstring::data可能会返回一个临时位置,并不一定会将指针返回到内存中的实际位置,由对象使用存储数据。

有什么想法吗?

2 个答案:

答案 0 :(得分:10)

为什么不使用vector<char>代替string?这样你就可以做到:

vector<char> v(100, '\0');
recv_n(handle, &v[0], 100);

这对我来说似乎更惯用,特别是因为你没有将它用作字符串(你说它是原始数据)。

答案 1 :(得分:8)

是的,在C ++ 11之后。

但您无法使用s.data(),因为它会返回char const*

尝试:

std::string s(100, '\0');
recv_n(handle, &s[0], 100);

根据情况,我可能选择了std :: vector&lt; char&gt;特别是对于原始数据(尽管这完全取决于应用程序中数据的使用情况)。