在 C/C++ 中,字符串以 NULL 结尾。
我可以stringstream
像MemoryStream
在 C# 中那样用作内存流吗?
内存流的数据可能\0
在数据中间有值,但 C++ 字符串以 NULL 结尾。
在 C/C++ 中,字符串以 NULL 结尾。
我可以stringstream
像MemoryStream
在 C# 中那样用作内存流吗?
内存流的数据可能\0
在数据中间有值,但 C++ 字符串以 NULL 结尾。
在 a 中存储字符序列时,std::string
您可以包含空字符。相应地, astd::stringstream
也可以处理嵌入的空字符。但是,流上的各种格式化操作不会通过空字符。此外,当使用内置字符串将值分配给std::string
空字符时,这很重要,即,您需要使用各种重载,将字符序列的大小作为参数。
你到底想达到什么目的?可能有比在字符串流中旅行更简单的方法。例如,如果您想读取流接口以与内存缓冲区进行交互,那么自定义流缓冲区真的很容易编写和设置:
struct membuf
: std::streambuf
{
membuf(char* base, std::size_t size) {
this->setp(base, base + size);
this->setg(base, base, base + size);
}
std::size_t written() const { return this->pptr() - this->pbase(); }
std::size_t read() const { return this->gptr() - this->eback(); }
};
int main() {
// obtain a buffer starting at base with size size
membuf sbuf(base, size);
std::ostream out(&sbuf);
out.write("1\08\09\0", 6); // write three digits and three null chars
}
在 C/C++ 中,字符串以 NULL 结尾。
每种语言都有自己的字符串特征。
我可以使用 stringstream 作为 C# 中的 MemoryStream 之类的内存流吗?
当然。内存流是由内存(而不是文件)支持的流。这正是 std::stringstream 是什么。界面有一些差异,但这些差异很小,使用文档应该很容易解决任何混淆。
内存流的数据可能在数据中间有 \0 值,但 C++ 字符串以 NULL 结尾。
这是完全不正确的。
C 和 C++ 是两种不同的语言,在 C 中连续字符的序列表示字符串,您可以将其视为可以设置/获取其值的内存部分,使用memcpy()
, memset()
, memcmp()
.
在 C++ 中,字符串是指用于获取正确数据的一类信息作为字符串。因此,您不能将其视为具有char
类型的内存位置序列。