Навіщо визначати \ 0 як перший елемент масиву символів у C?


75

Коли я читаю вихідний код BlueZ , я часто бачу charмасиви, визначені таким чином:

Яка користь визначати перший елемент як \0?


23
Він ефективно приховує рядок від друку або копіювання за допомогою стандартних функцій - яким би не був намір.
tofro

У Bluez ці масиви стилів використовуються як: struct sockaddr_un addr; memcpy (addr.sun_path, BLUEZ_SCO_SK_PATH, sizeof (BLUEZ_SCO_SK_PATH)); Як виглядатиме шлях до сокета, / dev / socket /? Bluez_sco_socket? або його не можна побачити за допомогою команди "ls"?
user1923105

Відповіді:


116

У вашому конкретному випадку цей масив використовується як ім'я шляху для PF_LOCALсокета; дивіться тут . І провідний NUL використовується, щоб вказати, що адреса є абстрактною. Від man 7 unix :

абстрактна адреса сокета відрізняється тим, що sun_path [0] є нульовим байтом ('\ 0').

І це єдина причина, чому є перший елемент \0.


9
Можливо, це також потрібно процитувати для нащадків: "[Т] абстрактний простір імен [як] введено в Linux 2.2 і не повинен використовуватися в портативних програмах".
Кевін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.