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

Lesezeit: 1 Minute

Benutzeravatar von user1923105
Benutzer1923105

Wenn ich lese BlauZ Quellcode, sehe ich oft char Arrays wie folgt definiert:

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

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

  • Es verbirgt effektiv die Zeichenfolge vor dem Drucken oder Kopieren mit Standardfunktionen – was auch immer die Absicht sein mag.

    – tofro

    11. Juli 2016 um 10:16 Uhr

  • In Bluez werden diese Stil-Arrays 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 es kann nicht mit dem Befehl “ls” gesehen werden?

    – Benutzer1923105

    11. Juli 2016 um 10:32 Uhr


Benutzeravatar von Sergio
Sergio

In Ihrem speziellen Fall wird dieses Array als Pfadname für a verwendet PF_LOCAL Steckdose; sehen hier. Und führende NUL wird verwendet, um darauf hinzuweisen, dass die Adresse abstrakt ist. Aus Mann 7 Unix:

eine abstrakte Socket-Adresse zeichnet sich dadurch aus, dass sun_path[0] ist ein Nullbyte (‘\0’).

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

  • Vielleicht möchte ich dies auch für die Nachwelt zitieren: “[T]Der abstrakte Namensraum w[as] wurde mit Linux 2.2 eingeführt und sollte nicht in portablen Programmen verwendet werden.”

    – Kevin

    12. Juli 2016 um 5:29 Uhr

1417340cookie-checkWarum \0 als erstes Element eines char-Arrays in C definieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy