C/C++ では、文字列は NULL で終了します。
C#stringstream
のようにメモリ ストリームとして使用できますか?MemoryStream
メモリ ストリームのデータは\0
、データの途中で値を持つ場合がありますが、C++ 文字列は NULL で終了します。
C/C++ では、文字列は NULL で終了します。
C#stringstream
のようにメモリ ストリームとして使用できますか?MemoryStream
メモリ ストリームのデータは\0
、データの途中で値を持つ場合がありますが、C++ 文字列は NULL で終了します。
文字シーケンスを に格納する場合、std::string
ヌル文字を含めることができます。同様に、astd::stringstream
は埋め込まれたヌル文字も処理できます。ただし、ストリームに対するさまざまな書式設定された操作は、null 文字を通過しません。また、組み込み文字列を使用しstd::string
て null 文字に値を代入する場合は問題になります。つまり、文字シーケンスのサイズを引数として取るさまざまなオーバーロードを使用する必要があります。
正確に何を達成しようとしていますか?糸の流れで移動するよりも簡単なアプローチがあるかもしれません。たとえば、ストリーム インターフェイスを読み取ってメモリ バッファーとやり取りする場合、カスタム ストリーム バッファーを作成してセットアップするのは非常に簡単です。
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 で終了します。
各言語には独自の文字列機能があります。
C# の MemoryStream のように stringstream をメモリ ストリームとして使用できますか?
もちろん。メモリ ストリームは、(ファイルではなく) メモリによってサポートされるストリームです。これはまさに std::stringstream です。インターフェイスにはいくつかの違いがありますが、これらはマイナーなものであり、ドキュメントを使用すると混乱を簡単に解決できます。
メモリ ストリームのデータは、データの途中で \0 値を持つ場合がありますが、C++ 文字列は NULL で終了します。
これは完全に間違っています。
memcpy()
C と C++ は 2 つの異なる言語であり、C の連続する文字列は文字列を意味し、memset()
、、 を使用して、その値を設定/取得できるメモリ部分として扱うことができますmemcmp()
。
C++ では、文字列とは、正しいデータを文字列として取得するために使用される情報のクラスを意味します。したがって、タイプを持つメモリ位置のシーケンスとして扱うことはできませんchar
。