NULL(或 0 或“\0”)在无符号字符数组和字符数组中如何表现?在 char 数组中,NULL 确定 char 数组的结尾。 unsigned char 数组的情况是否相同?如果不是,我们如何确定 unsigned char 数组的结尾?
最佳答案
NULL
的确切定义是实现定义的;唯一能保证的是它是一个扩展为空指针常量的宏。反过来,空指针常量是“计算结果为零的整数类型的整型常量表达式 (5.19) 纯右值或 std::nullptr_t
类型的纯右值”。它可能会也可能不会转换为 char
或 unsigned char
;它应该只与指针一起使用。
0
是 int
类型的文字,其值为零。 '\0'
是 char 类型的文字,其值为零。两者均可隐式转换为 unsigned char
,产生零值。
C 和 C++ 中的字符串通常表示为以第一个零值结尾的 char 序列,这纯粹是一种约定。没有什么可以阻止您声明不遵循此约定的 char 数组:
char embedded_zero[] = {'a', '\0', 'b'};
当然,期望其参数遵循约定的函数将在第一个零处停止:strlen(embedded_zero) == 1;
。
当然,您可以编写一个采用 unsigned char*
的函数并遵循类似的约定,要求调用者使用具有零值的元素来指示序列的结尾。或者,您可以编写一个函数,该函数采用第二个参数来指示序列的长度。您可以决定哪种方法更适合您的设计。
关于c++ - NULL(或 0 或 '\0' )值在 c++ 中的 unsigned char 数组和 char 数组中的解释是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19555481/