我不明白什麼 '\ 0' 在兩個不同的地方指的是在下面的代碼:' 0'是什麼意思?
string x = "hhhdef\n";
cout << x << endl;
x[3]='\0';
cout << x << endl;
cout<<"hhh\0defef\n"<<endl;
結果:
hhhdef
hhhef
HHH
任何人都可以gi給我一些指針?
我不明白什麼 '\ 0' 在兩個不同的地方指的是在下面的代碼:' 0'是什麼意思?
string x = "hhhdef\n";
cout << x << endl;
x[3]='\0';
cout << x << endl;
cout<<"hhh\0defef\n"<<endl;
結果:
hhhdef
hhhef
HHH
任何人都可以gi給我一些指針?
C++ std::string
s是「計數」字符串 - 即它們的長度存儲爲整數,並且它們可以包含任何字符。當你用一個\0
代替第三個字符時,沒有什麼特別的事情發生 - 它被打印,就好像它是任何其他字符一樣(特別是,你的控制檯簡單地忽略它)。
在最後一行中,您將打印一個C字符串,其結尾由找到的第一個\0
確定。在這種情況下,cout
繼續打印字符,直到找到一個\0
,在您的情況下,它在第三個h
之後。
\0
是NULL字符,你可以找到它在你的ASCII table
,它有它是用來確定的C風格的字符串末尾值0
。
但是,C++類std::string
將其大小存儲爲整數,因此不依賴於它。
C++有兩種字符串類型:
內置的C風格空終止字符串這是真正的字節數組和C++標準庫std::string
類,這是不空值終止。
打印以空字符結尾的字符串打印所有東西,直到第一個空字符。打印std::string
將打印整個字符串,而不管其中間是否爲空字符。
您在這裏以兩種不同的方式表示字符串,這就是行爲不同的原因。
第二個比較容易解釋;這是一個C風格的原始字符數組。在C風格的字符串中,'\0'
表示空終止符;它用於標記字符串的末尾。所以任何處理/顯示字符串的函數在它們碰到它時會立即停止(這就是爲什麼最後一個字符串被截斷的原因)。
第一個例子是創建一個完整的C++ std::string
對象。這些不會賦予'\0'
(它們沒有空終止符)的任何特殊含義。
+1 Thanx更新我...... !!!我明白了你的觀點。 –
@LearnedfromMistake與您的用戶名一致。 ;-) –