为什么要将\0定义为C中字符数组的第一个元素?
当我阅读源代码时,我经常看到为什么要将\0定义为C中字符数组的第一个元素?,c,arrays,C,Arrays,当我阅读源代码时,我经常看到char数组定义如下: // bluez/android/sco-msg.h static const char BLUEZ_SCO_SK_PATH[] = "\0bluez_sco_socket"; 将第一个元素定义为\0有什么好处?在您的特定情况下,此数组用作PF\u LOCAL套接字的路径名;看见前导NUL用于指出地址是抽象地址。发件人: 抽象套接字地址的区别在于 sun_路径[0]是空字节('\0') 这就是为什么第一个元素是\0的唯一原因,它有效地隐藏了字
char
数组定义如下:
// bluez/android/sco-msg.h
static const char BLUEZ_SCO_SK_PATH[] = "\0bluez_sco_socket";
将第一个元素定义为
\0
有什么好处?在您的特定情况下,此数组用作PF\u LOCAL
套接字的路径名;看见前导NUL用于指出地址是抽象地址。发件人:
抽象套接字地址的区别在于
sun_路径[0]是空字节('\0')
这就是为什么第一个元素是
\0
的唯一原因,它有效地隐藏了字符串,使其无法使用标准函数进行打印或复制-无论其意图如何;memcpy(地址:sun_path、BLUEZ_SCO_SK_path、sizeof(BLUEZ_SCO_SK_path));套接字路径看起来是什么,/dev/socket/?bluez\u sco\u socket?或者使用“ls”命令看不到它?可能还想引用这句话,为后代着想:“[t]抽象名称空间w[as]是Linux 2.2引入的,不应该在可移植程序中使用。”