在指针之间打印文本

时间:2013-07-12 11:05:19

标签: c++ string pointers

我有一个带指针的字符范围(pBeginpEnd)。我认为它是一个字符串,但它不是\0终止的。如何有效地将其打印到std::cout

  • 无需创建副本,例如std::string
  • 没有打印每个角色的循环

我们有很好的解决方案吗?如果没有,最顺畅的解决方法是什么?

2 个答案:

答案 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仍然指向原始数组中的元素而不是指向其末尾的元素