Warum \ 0 als erstes Element eines char-Arrays in C definieren?

75

Wenn ich BlueZ- Quellcode lese , sehe ich oft charArrays, die wie folgt definiert sind:

Was nützt es, das erste Element als zu definieren \0?

user1923105
quelle
23
Es verbirgt die Zeichenfolge effektiv vor dem Drucken oder Kopieren mit Standardfunktionen - was auch immer die Absicht sein mag.
Tofro
In Bluez werden diese Stilarrays wie folgt verwendet: struct sockaddr_un addr; memcpy (addr.sun_path, BLUEZ_SCO_SK_PATH, sizeof (BLUEZ_SCO_SK_PATH)); Wie würde der Socket-Pfad aussehen, / dev / socket /? Bluez_sco_socket? oder kann es nicht mit dem Befehl "ls" gesehen werden?
user1923105

Antworten:

116

In Ihrem speziellen Fall wird dieses Array als Pfadname für einen PF_LOCALSocket verwendet. siehe hier . Und führende NUL wird verwendet, um darauf hinzuweisen, dass die Adresse abstrakt ist. Von Mann 7 Unix :

Eine abstrakte Socket-Adresse zeichnet sich dadurch aus, dass sun_path [0] ein Null-Byte ('\ 0') ist.

Und dies ist der einzige Grund, warum das erste Element ist \0.

Sergio
quelle
9
Vielleicht möchten Sie dies auch für die Nachwelt zitieren: "Der abstrakte Namespace wurde mit Linux 2.2 eingeführt und sollte nicht in tragbaren Programmen verwendet werden."
Kevin