2016-07-11 34 views
75

Quando ho letto BlueZ codice sorgente, vedo spesso char array definiti in questo modo:Perché definire 0 come primo elemento di un array di caratteri in C?

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

A che serve per definire il primo elemento come \0?

+23

Nasconde efficacemente la stringa dalla stampa o dalla copia con le funzioni standard. Qualunque sia l'intenzione. – tofro

+0

In Bluez, questi array di stile sono usati come: struct sockaddr_un addr; memcpy (addr.sun_path, BLUEZ_SCO_SK_PATH, sizeof (BLUEZ_SCO_SK_PATH)); Come appare il percorso del socket,/dev/socket /? Bluez_sco_socket? o non può essere visto usando il comando "ls"? – user1923105

risposta

116

Nel caso specifico, questo array viene utilizzato come percorso per una presa PF_LOCAL; vedi here. E il primo NUL è usato per indicare che l'indirizzo è astratto. Da man 7 unix:

domicilio presa astratto si distingue per il fatto che sun_path [0] è un byte nullo ('\ 0').

E questo è l'unico motivo per cui il primo elemento è \0.

+9

Potrebbe voler citare anche questo, per i posteri: "[T] ha namespace astratto w [as] introdotto con Linux 2.2 e non dovrebbe essere usato nei programmi portatili." – Kevin