Waarom \0 definiëren als het eerste element van een char-array in C?

Als ik de BlueZ-broncode lees, zie ik vaak char-arrays gedefinieerd als dit:

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

Wat heb je eraan om het eerste element te definiëren als \0?


Antwoord 1, autoriteit 100%

In jouw specifieke geval wordt deze array gebruikt als padnaam voor een PF_LOCALsocket; zie hier. En de leidende NUL wordt gebruikt om aan te geven dat het adres een abstract adres is. Van man 7 unix:

een abstract socketadres onderscheidt zich door het feit dat:
sun_path[0] is een null-byte (‘\0’).

En dit is de enige reden waarom het eerste element \0is.

Other episodes