次のコードで、2 つの異なる場所にある '\0' の意味がわかりません。
string x = "hhhdef\n";
cout << x << endl;
x[3]='\0';
cout << x << endl;
cout<<"hhh\0defef\n"<<endl;
結果:
hhhdef
ふふふ
うーん
誰かが私にいくつかの指針を与えることができますか?
次のコードで、2 つの異なる場所にある '\0' の意味がわかりません。
string x = "hhhdef\n";
cout << x << endl;
x[3]='\0';
cout << x << endl;
cout<<"hhh\0defef\n"<<endl;
結果:
hhhdef
ふふふ
うーん
誰かが私にいくつかの指針を与えることができますか?
C++std::string
は「カウントされた」文字列です。つまり、その長さは整数として格納され、任意の文字を含めることができます。3 番目の文字を特別なものに置き換えると、\0
他の文字であるかのように出力されます (特に、コンソールは単純に無視します)。
代わりに、最後の行では、最初に見つかった文字列によって末尾が決定される C 文字列を出力し\0
ています。このような場合、cout
が見つかるまで文字を出力し続け\0
ます。これは、あなたの場合、3 番目の の後h
です。
C++ には 2 つの文字列型があります。
実際には単なるバイト配列である組み込みの C スタイルの null で終了する文字列と、 null で終了しないstd::string
C++ 標準ライブラリクラス。
null で終わる文字列を出力すると、最初の null 文字まですべてが出力されます。astd::string
を印刷すると、途中のヌル文字に関係なく、文字列全体が印刷されます。
\0
は NULL 文字です。 で見つけることができますASCII table
。値は 0 です。
C スタイルの文字列の終わりを決定するために使用されます。
ただし、C++ クラスstd::string
はそのサイズを整数として格納するため、それに依存しません。
ここでは文字列を 2 つの異なる方法で表現しているため、動作が異なります。
2 番目の方が説明が簡単です。これは C スタイルの生の char 配列です。C スタイルの文字列で'\0'
は、ヌル ターミネータを示します。文字列の終わりを示すために使用されます。したがって、文字列を処理/表示する関数は、ヒットするとすぐに停止します (これが、最後の文字列が切り捨てられる理由です)。
最初の例は、完全な形式の C++std::string
オブジェクトの作成です。これらは特別な意味を割り当てません'\0'
(null ターミネータはありません)。