2013-10-24 49 views
2

NULL(或0或'\ 0')在unsigned char數組和char數組中的表現如何?在char數組中,NULL確定char數組的結束。與unsigned char數組是否一樣?如果不是,我們如何確定unsigned char數組的末尾?在C++中的unsigned char數組和char數組中是否用NULL(或0或' 0')值解釋不同?

+0

任一個的結尾都是''\ 0'',它是NUL字符。它與'NULL'無關。 – chris

+0

是NUL或'\ 0'與C++中的NULL不同 – annunarcist

+0

''\ 0''與signed或unsigned char具有相同的值。該字節全爲0 ... – nhgrif

回答

3

NULL的確切定義是實現定義的;所有這一切都保證它是一個擴展爲空指針常量的宏。反過來,空指針常量是「一個整數類型的整數常量表達式(5.19)prvalue,其值爲0或類型爲std::nullptr_t的prvalue。」它可能會也可能不會兌換成charunsigned char;它應該只能用於指針。

0是具有值爲零的int類型的文字。 '\0'是一個值爲零的字符型文字。要麼隱式轉換爲unsigned char,產生零值。

純粹是一種約定,C和C++中的字符串通常表示爲以第一個零值結束的序列char。沒有什麼能阻止你從宣佈不遵守這個約定一個字符數組:

char embedded_zero[] = {'a', '\0', 'b'}; 

當然,這預計其參數按照慣例將停止在第一個零的函數:strlen(embedded_zero) == 1;

當然,您可以編寫一個函數,該函數採用unsigned char*並遵循相似的約定,要求調用者使用具有零值的元素指示序列的末尾。或者,您可以編寫一個函數,該函數需要第二個參數來指示序列的長度。您決定哪種方法更適合您的設計。

2

嚴格來說,'\0'表示字符串文字的結束,而不是任何char數組的結束。例如,如果你聲明一個數組而沒有將它初始化爲一個字符串文字,那麼它就沒有結束標記。

但是,如果使用字符串文字初始化unsigned char的數組,則會得到與常規字符數組中相同的'\0'結尾標記。換句話說,在下面的代碼

char s[] = "abc"; 
unsigned char u[] = "abc"; 

s[3]u[3]包含的'\0'相同的值。

相關問題