简体   繁体   中英

Reading raw byte array into std::string

I've been wondering about the following issue: assume I have a C style function that reads raw data into a buffer

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

Can I read the data directly into an std:string or stringstream without allocating any temporal buffers? For example,

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

I guess this solution has an undefined outcome, because, afaik, string::c_str and string::data might return a temporal location and not necessarily return the pointer to the real place in the memory, used by the object to store the data.

Any ideas?

Why not use a vector<char> instead of a string ? That way you can do:

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

This seems more idiomatic to me, especially since you aren't using it as a string (you say it's raw data).

Yes, after C++11.

But you cant use s.data() as it returns a char const*

Try:

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

Depending on situation, I may have chosen a std::vector<char> especially for raw data (though it would all depend on usage of the data in your application).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM