为什么定义\ 0作为在C中的字符数组的第一个元素?

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

 // bluez/android/sco-msg.h static const char BLUEZ_SCO_SK_PATH[] = "\0bluez_sco_socket"; 

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

在你的特定情况下,这个数组被用作PF_LOCAL套接字的path名; 看到这里 。 而领先的NUL则用来表示地址是抽象的。 从男人7 unix :

抽象套接字地址是由sun_path [0]是一个空字节('\ 0')的事实来区分的。

这就是为什么第一个元素是\0的唯一原因。