我试图弄清楚构造一个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**
(或其他任何可能提供更多信息的内容)?
答案 0 :(得分:2)
char *
不一定需要引用C字符串,也不一定需要一个已知长度的内存块,需要通过字节来寻址,大概是因为它来自网络。
在将int8_t
和uint8_t
等类型添加到C99之前,char *
是引用连续字节数组的唯一实用方法。实际上,struct hostent
早于C89,它使void
类型正式化。如果今天写完,该字段将被声明为void **
或可能uint8_t **
。