ASCII的第一個字元,二進位制是0000000(7位),十六進位制0x00,十進位制0,名字是Null,縮寫是NUL,意思是空字元。 在C語言中,用這個字元表示一個字串的結尾。 比如"ABC",他的實際編碼是0x41 0x42 0x43 0x00(十六進位制表示)。 但是這樣會產生一些問題,比如Unicode如果使用UTF-16、UTF-32等編碼,由於是多位元組編碼,有可能會在其中一個位元組出現0x00,就造成了在字串中間出現空字元,解決方法就是用其他資料結構(而不是字串)來儲存字元。或者,如C語言的前身B語言之父、Unix的發明人做的,直接發明了一種可變長的編碼UTF-8來解決了字串中間出現空字元的問題。 還有個問題其實算不上問題,那就是C語言的字串不是二進位制安全的,這樣就不能把一些非文字的二進位制資料儲存到字串中,因為同樣可能在中間出現0x00這樣的位元組。當然,完全可以用其他資料結構來解決。 你可以在C語言中寫一個字串,中間用跳脫字元“\0”插入一個空字元,然後輸出這個字串。編譯執行,你會發現空字元之後的字元不會輸出。
ASCII的第一個字元,二進位制是0000000(7位),十六進位制0x00,十進位制0,名字是Null,縮寫是NUL,意思是空字元。 在C語言中,用這個字元表示一個字串的結尾。 比如"ABC",他的實際編碼是0x41 0x42 0x43 0x00(十六進位制表示)。 但是這樣會產生一些問題,比如Unicode如果使用UTF-16、UTF-32等編碼,由於是多位元組編碼,有可能會在其中一個位元組出現0x00,就造成了在字串中間出現空字元,解決方法就是用其他資料結構(而不是字串)來儲存字元。或者,如C語言的前身B語言之父、Unix的發明人做的,直接發明了一種可變長的編碼UTF-8來解決了字串中間出現空字元的問題。 還有個問題其實算不上問題,那就是C語言的字串不是二進位制安全的,這樣就不能把一些非文字的二進位制資料儲存到字串中,因為同樣可能在中間出現0x00這樣的位元組。當然,完全可以用其他資料結構來解決。 你可以在C語言中寫一個字串,中間用跳脫字元“\0”插入一個空字元,然後輸出這個字串。編譯執行,你會發現空字元之後的字元不會輸出。