是否可以在std :: string中保留空间并获取指向它的指针,以直接将char数据复制到其中?
是的。使用其resize()
方法来分配内存,然后使用其data()
方法(C++17及以上版本),或其operator []
,来访问该内存。
我必须与返回通过将它们复制到char *中的字符串的C库进行接口。如何设置std :: string,以使库可以直接写入其中,避免中间副本。
像这样:
std::string mystring;
int strlen = foolib_get_string_size(fooval);
if (strlen > 0)
{
mystring.resize(strlen);
foolib_string_to_char_buffer(fooval, mystring.data(), strlen);
}
或者,std::string
也可以使用构造函数来分配内存:
int strlen = foolib_get_string_size(fooval);
std::string mystring(strlen, '\0');
if (strlen > 0)
foolib_string_to_char_buffer(fooval, mystring.data(), strlen);
当然,这需要
std::string
的内存块是连续分配的,这只在C++11及以后版本中得到保证(但实际上,在几乎所有已知的实现中都是这样做的)。如果您没有使用C++11或更高版本,并且确实想符合标准,则应使用中间缓冲区,例如
std::vector
,例如:
std::string mystring;
int strlen = foolib_get_string_size(fooval);
if (strlen > 0)
{
std::vector<char> myvector(strlen);
foolib_string_to_char_buffer(fooval, &myvec[0], strlen);
mystring.assign(&myvec[0], strlen);
}
mystring.resize(strlen);
,而不是mystring.size(strlen);
。 - kesarling He-Him