2013-01-06 541 views
10

我不明白什麼 '\ 0' 在兩個不同的地方指的是在下面的代碼:' 0'是什麼意思?

string x = "hhhdef\n"; 
cout << x << endl; 
x[3]='\0'; 
cout << x << endl; 
cout<<"hhh\0defef\n"<<endl; 

結果:

hhhdef

hhhef

HHH

任何人都可以gi給我一些指針?

回答

11

C++ std::string s是「計數」字符串 - 即它們的長度存儲爲整數,並且它們可以包含任何字符。當你用一個\0代替第三個字符時,沒有什麼特別的事情發生 - 它被打印,就好像它是任何其他字符一樣(特別是,你的控制檯簡單地忽略它)。

在最後一行中,您將打印一個C字符串,其結尾由找到的第一個\0確定。在這種情況下,cout繼續打印字符,直到找到一個\0,在您的情況下,它在第三個h之後。

1

\0是NULL字符,你可以找到它在你的ASCII table,它有它是用來確定的C風格的字符串末尾值0

但是,C++類std::string將其大小存儲爲整數,因此不依賴於它。

4

C++有兩種字符串類型:

內置的C風格空終止字符串這是真正的字節數組和C++標準庫std::string類,這是空值終止。

打印以空字符結尾的字符串打印所有東西,直到第一個空字符。打印std::string將打印整個字符串,而不管其中間是否爲空字符。

+1

+1 Thanx更新我...... !!!我明白了你的觀點。 –

+1

@LearnedfromMistake與您的用戶名一致。 ;-) –

1

您在這裏以兩種不同的方式表示字符串,這就是行爲不同的原因。

第二個比較容易解釋;這是一個C風格的原始字符數組。在C風格的字符串中,'\0'表示空終止符;它用於標記字符串的末尾。所以任何處理/顯示字符串的函數在它們碰到它時會立即停止(這就是爲什麼最後一個字符串被截斷的原因)。

第一個例子是創建一個完整的C++ std::string對象。這些不會賦予'\0'(它們沒有空終止符)的任何特殊含義。