2012-04-04 8 views
2

埋め込みNULL文字をサポートするC++の文字列を使用できますか?C++でNULL文字を文字列の中に埋め込む方法は?

私の問題は次のとおりです。 埋め込まれたNULLで文字列を作成し、それをバイト配列としてC++ DLLに送りました。

string inputStr("he\0llo", 6); 
    int byteLength = 6; 
    BYTE *inputByte = (BYTE*)(char*)inputStr.c_str(); 
    ApplyArabicMapping(inputByte , byteLength); 
+2

より明確にする必要があります... –

+0

"xxx \ 0"のような意味ですか? – StuartLC

+0

なぜそれが必要ですか?文字列クラスは '' \ 0''文字が終わることを知る必要はありません。 さらに、string.c_str()メソッドを使用すると、最後に ''\ 0''文字の**文字配列**が得られます。 – alegen

答えて

2

それは - 末端NULLではないのではい、std::stringNULL文字の格納をサポートしています。あなたは多くの方法で1を作成することができます。

string str("he\0llo", 6); 
str.append(1, '\0'); 
str.push_back('\0'); 
const char[] cstr = "hell\0o"; 
string str2(cstr, cstr + sizeof(cstr) - 1); // - 1 for the NULL 
+2

これは正しいのですが、私は 'std :: vector 'は機能的にはほとんど同じで、コンテナには期待できない文字があるかもしれないことを明らかにしているという点を指摘したいと思います。 – RedX

+1

@RedX:バイナリデータのために 'std :: vector 'を使用している間も、私はまだ' std :: string'を使っています。 –

+1

@RedX:*あなたがコンテナ内で期待していない文字を見つけるかもしれません。*そのステートメントの問題は、 'std :: string'にNULを期待しないことを前提としていることです。私は、それを仮定せずに乗り越えないことを学ぶ方が良いと信じています。 'std :: string'と' std :: vector 'との違いは、前者は小さな数字だけでなく*テキスト*を格納していることを示しており、処理には余裕があります。 –

2

あなたは文字バッファは、その「コンテンツの長さ」と一緒に保存されている数え文字列を、使用することができます。任意の文字を埋め込むことができます。たとえば、std::stringは、カウントされた文字列の一種です。

明らかに、古典的なC文字列を期待する関数にこのような文字列を渡すことはできません。文字列終結文字として検出される最初のnullが表示されるためです。

+1

@AhmedMostafa私は(おそらく他の人たちも)コメントの意味を理解していないかもしれないので、元の質問をあなたの問題で更新しなければならないかもしれません。 –