为什么将\ 0定义为C中char数组的第一个元素?


75

当我阅读BlueZ源代码时,经常会看到这样char定义的数组:

将第一个元素定义为有什么好处\0


23
它可以通过标准功能有效地将字符串隐藏起来,使其无法打印或复制-无论意图是什么。
tofro

在Bluez中,此样式数组的用法如下:struct sockaddr_un addr; memcpy(addr.sun_path,BLUEZ_SCO_SK_PATH,sizeof(BLUEZ_SCO_SK_PATH)); / dev / socket /?socket路径看起来是什么?bluez_sco_socket?还是使用“ ls”命令看不到?
user1923105'7

Answers:


116

在您的特定情况下,此数组用作PF_LOCAL套接字的路径名;看这里。领先的NUL用来指出该地址是一个抽象地址。从man 7 unix开始

抽象套接字地址的特征在于sun_path [0]是空字节('\ 0')。

这是第一个元素为的唯一原因\0


9
可能也想引用一下,以供后代参考:“抽象名称空间是Linux 2.2引入的,不应在可移植程序中使用。”
凯文
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.