我试图找出一段构建 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_t
和 uint8_t
等类型之前,char *
是引用连续字节数组的唯一实用方法。事实上,struct hostent
早于 C89,它正式化了 void
类型。如果今天编写,该字段将被声明为 void **
或可能 uint8_t **
。
关于c - 为什么 h_addr_list (在 hostent 结构中)类型为 char** 而不是 void*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13513878/