gpt4 book ai didi

c++ - 如何在没有 C++ 拷贝的情况下从 ostringstream 获取 char 指针

转载 作者:太空狗 更新时间:2023-10-29 21:01:49 26 4
gpt4 key购买 nike

我有一个包含一些数据的 ostringstream 变量。我想设置一个 char * 指针,指向 ostringstream 中的数据。

如果我执行以下操作:

std::ostringstream ofs;
.....
const char *stam = (ofs.str()).c_str();

ofs中有字符串内容的拷贝。我想在没有拷贝的情况下获得指向该内容的指针。

有办法吗?

最佳答案

这实际上回答了这个问题......花了一段时间,但出于同样的原因我想这样做(效率与便携性对我的情况来说很好):

class mybuf : public std::stringbuf {
public:
// expose the terribly named end/begin pointers
char *eback() {
return std::streambuf::eback();
}
char *pptr() {
return std::streambuf::pptr();
}
};


class myos : public std::ostringstream {
mybuf d_buf;
public:
myos() {
// replace buffer
std::basic_ostream<char>::rdbuf(&d_buf);
}
char *ptr();
};

char *myos::ptr() {
// assert contiguous
assert ( tellp() == (d_buf.pptr()-d_buf.eback()) );
return d_buf.eback();
}

int main() {
myos os;
os << "hello";
std::cout << "size: " << os.tellp() << std::endl;
std::string dat(os.ptr(),os.tellp());
std::cout << "data: " << dat << std::endl;
}

这再次指出了标准库更深层次的潜在问题——契约(Contract)与“安全”之间的混淆。在编写消息服务时,我需要一个具有高效契约的库……而不是安全性。其他时候,在编写 UI 时,我需要强大的安全性 - 而不太关心效率。

关于c++ - 如何在没有 C++ 拷贝的情况下从 ostringstream 获取 char 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17197044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com