我有一个带指针的字符范围(pBegin
和pEnd
)。我认为它是一个字符串,但它不是\0
终止的。如何有效地将其打印到std::cout
?
std::string
我们有很好的解决方案吗?如果没有,最顺畅的解决方法是什么?
答案 0 :(得分:6)
你可以使用ostream::write,它带有指针和长度参数:
std::cout.write(pBegin, pEnd - pBegin);
答案 1 :(得分:0)
从C ++ 17开始,你可以使用std::string_view
,它是为了共享std::string
的一部分而不复制而创建的
std::cout << std::string_view(pBegin, pEnd - pBegin);
pEnd
必须指向一个传递最后一个要打印的字符,就像C ++中的迭代器一样,而不是打印的最后一个字符
在较旧的C ++标准中,boost::string_ref
是另一种选择。但是,如果您需要通过一些需要以null结尾的字符串而不需要任何外部库的函数来处理字符串,那么这是一个简单的解决方案
char tmpEnd = *pEnd; // backup the after-end character
*pEnd = '\0';
std::cout << pBegin; // use it as normal C-style string, like dosomething(pBegin);
*pEnd = tmpEnd; // restore the char
在这种情况下,请确保pEnd
仍然指向原始数组中的元素而不是指向其末尾的元素