NULL(或0或'\ 0')在unsigned char數組和char數組中的表現如何?在char數組中,NULL確定char數組的結束。與unsigned char數組是否一樣?如果不是,我們如何確定unsigned char數組的末尾?在C++中的unsigned char數組和char數組中是否用NULL(或0或' 0')值解釋不同?
2
A
回答
3
NULL
的確切定義是實現定義的;所有這一切都保證它是一個擴展爲空指針常量的宏。反過來,空指針常量是「一個整數類型的整數常量表達式(5.19)prvalue,其值爲0或類型爲std::nullptr_t
的prvalue。」它可能會也可能不會兌換成char
或unsigned 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'
相同的值。
相關問題
- 1. 如何在char數組中存儲'\ 0'
- 2. 將數組從unsigned char *轉換爲char *
- 3. Unsigned char char *和int在C中?
- 4. 如何將包含0或1的char數組轉換爲C中的小數?
- 5. char *到數組<unsigned char ^>
- 6. 如何從unsigned char數組寫入數據,該數組有NULL?
- 7. 在C++中獲取ncurses chtype或unsigned char的整數值
- 8. 存儲在unsigned char數組中
- 9. 用char數組填充char數組(char數組到int數組)
- 10. 異或的char *數組
- 11. (char)NULL,'\ 0'和0在C的memset中意味着相同的東西?
- 12. C + + memcmp與unsigned char數組失敗?
- 13. atoi from char *在C中返回0 0
- 14. 異或兩個char數組在C++
- 15. C - 在一個2d char *數組中存儲多個char數組
- 16. strlen用於unsigned char數組和signed char數組時,會出現警告
- 17. C中的char數組?
- 18. 數組的Int和* Char - C++
- 19. 如何將unsigned char *轉換爲數組<unsigned char> ^?
- 20. C++ - char數組
- 21. 在C++中解析char數組
- 22. 將float vector重新解釋爲unsigned char數組並返回
- 23. C中的char *數組
- 24. Mallocing unsigned char數組存儲整數
- 25. C/C++ enum和char *數組
- 26. C - 是否有一種方法可以區分NULL和'\ 0'作爲char數組中的第一個?
- 27. C++如何在函數調用中將char *轉換爲unsigned char *?
- 28. Android - 將char數組的值移動到相同的char數組
- 29. 如何將unsigned char數組傳遞給C++中的函數?
- 30. char數組中的Turbo C
任一個的結尾都是''\ 0'',它是NUL字符。它與'NULL'無關。 – chris
是NUL或'\ 0'與C++中的NULL不同 – annunarcist
''\ 0''與signed或unsigned char具有相同的值。該字節全爲0 ... – nhgrif