【问题标题】:Why define \0 as the first element of a char array in C?为什么将 \0 定义为 C 中 char 数组的第一个元素?
【发布时间】:2016-07-11 10:11:20
【问题描述】:

当我阅读BlueZ 源代码时,我经常看到char 数组是这样定义的:

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

将第一个元素定义为\0有什么好处?

【问题讨论】:

  • 它有效地隐藏了字符串以防止使用标准函数打印或复制 - 无论意图是什么。
  • 在 Bluez 中,这种样式数组的使用如下: struct sockaddr_un addr; memcpy(addr.sun_path, BLUEZ_SCO_SK_PATH, sizeof(BLUEZ_SCO_SK_PATH));套接字路径会是什么样子, /dev/socket/?bluez_sco_socket ?或者使用“ls”命令看不到?

标签: c arrays


【解决方案1】:

在您的特定情况下,此数组用作PF_LOCAL 套接字的路径名;见here。并且前导 NUL 用于指出该地址是一个抽象地址。来自man 7 unix

抽象套接字地址的区别在于 sun_path[0] 是一个空字节('\0')。

这就是为什么第一个元素是\0的唯一原因。

【讨论】:

  • 为了后代,可能还想引用这个:“[T]he abstract namespace w[as] 随着 Linux 2.2 引入,不应该在可移植程序中使用。”
猜你喜欢
  • 2022-01-17
  • 2023-02-24
  • 2017-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
相关资源
最近更新 更多