1. ホーム
  2. c++

[解決済み] NULLを埋め込んだstd::stringはどのように構築するのですか?

2023-01-12 11:30:26

質問

std::stringを次のような行で構成したい場合、どのようにすればよいでしょうか。

std::string my_string("a\0b");

結果の文字列に3つの文字(a, null, b)を入れたいのですが、1つしか入りません。 適切な構文は何ですか?

どのように解決するのですか?

C++14以降

を作成することができるようになりました。 リテラル std::string

#include <iostream>
#include <string>

int main()
{
    using namespace std::string_literals;

    std::string s = "pl-\0-op"s;    // <- Notice the "s" at the end
                                    // This is a std::string literal not
                                    // a C-String literal.
    std::cout << s << "\n";
}

C++14以前

問題は std::string を受け取るコンストラクタです。 const char* は、入力がC文字列であると仮定しています。C文字列は \0 の終端に到達した時点でパースが停止します。 \0 文字に到達した時点で停止します。

これを補うために、(C-String ではなく) char 配列から文字列を構築するコンストラクタを使用する必要があります。これは2つのパラメータ、つまり配列へのポインタと長さを取ります。

std::string   x("pq\0rs");   // Two characters because input assumed to be C-String
std::string   x("pq\0rs",5); // 5 Characters as the input is now a char array with 5 characters.

注意:C++の場合 std::string ではない \0 -ターミネートされます(他の投稿で提案されているように)。しかし、C-String を含む内部バッファへのポインタを取り出すには、メソッド c_str() .

もチェックしてください。 Doug Tの回答 を使うことについては、以下の vector<char> .

もチェックしてください。 RiaD をチェックしてください。