[解決済み] 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 をチェックしてください。
関連
-
[解決済み] テスト
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み] 非静的データメンバの無効な使用
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】演算子のオーバーロード C++; <<操作のパラメータが多すぎる
-
[解決済み] 変数サイズのオブジェクトが初期化されないことがある c++
-
[解決済み] C++文字列リテラルのエスケープ文字に関する規則
-
[解決済み] ユーザー定義リテラルはC++にどのような機能を追加するのですか?
-
[解決済み] g++ の警告を詳細かつ冗長にするためのフラグ