我有一个缓冲区(为简单起见,假设是一个固定大小的数组),我想从中构建一个std::string
。该缓冲区可能以空字符结尾,也可能包含最后一个字符。如果缓冲区确实包含一个或多个空字符,则它们不应出现在结果string
中。复制应在第一个空字符或缓冲区末尾停止,以先到者为准。
这似乎是一个常见的需求,但是当查看std::string
API时,解决方案并不立即显而易见。
std::string
有一个通过const char *
和长度来构造范围的构造函数,但它会快乐地继续传递 null,并将其复制到字符串中。- 在构造
string
之前在缓冲区上调用std::strlen()
不是一个选项,因为strlen
要求字符串首先以 null 结尾。 - 我们可以使用上述构造函数来创建一个包含 null 的
string
,然后将其调整大小到第一个 null 之前,但这会浪费内存,因为string
将被过度分配。
最佳和/或惯用的方法是什么?