为什么h_addr_list(在hostent struct中)键入为char **而不是void *?

时间:2012-11-22 13:36:19

标签: 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**(或其他任何可能提供更多信息的内容)?

1 个答案:

答案 0 :(得分:2)

char *不一定需要引用C字符串,也不一定需要一个已知长度的内存块,需要通过字节来寻址,大概是因为它来自网络。

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