c - 为什么 h_addr_list (在 hostent 结构中)类型为 char** 而不是 void*?

标签 c networking

我试图找出一段构建 hostent 对象的代码,更具体地说,它的工作部分是填充 h_addr_list 数组。

令我困惑的是,分配给数组的值被强制转换为 char* ,据我所知,这个数组与字符串无关。

我注意到h_addr_list数组实际上输入为 char** .

我看到的唯一注意到这一事实的地方是 section 9.7 in beej's Guide to Network Programming ,但即使没有解释为什么这样输入。

有没有原因 h_addr_list输入为 char**而不是void*/void** (或者其他可能提供更多信息的内容)?

最佳答案

char * 不一定指的是 C 字符串,还指的是需要按字节寻址的已知长度的内存块,大概是因为它来自网络。

在 C99 添加 int8_tuint8_t 等类型之前,char * 是引用连续字节数组的唯一实用方法。事实上,struct hostent 早于 C89,它正式化了 void 类型。如果今天编写,该字段将被声明为 void ** 或可能 uint8_t **

关于c - 为什么 h_addr_list (在 hostent 结构中)类型为 char** 而不是 void*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13513878/

相关文章:

android - 蓝牙+安卓+散网拓扑

networking - 路由器与交换机(网络地址转换)

.net - SQL Server 2012 远程连接给出超时和 ASYNC_NETWORK_IO 错误

c - 在另一个动态分配的数组中释放一个动态分配的数组

c - 如何让 fgets 停止从键盘读取

Python 网络时间戳(SO_TIMESTAMP、SO_TIMESTAMPNS、SO_TIMESTAMPING)

c# - 给定服务器的 IP 地址和端口,如何使用 C# 测试到服务器的 TCP 连接?

c - C中奇怪的指针问题

c - MPI_Send 或 MPI_Recv 给出段错误

C - Check_expect_i 和段错误(核心转储)