2

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

我对分配给数组的值被强制转换为 的事实感到困惑,char*因为据我阅读,这个数组与字符串无关。

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

我看到的唯一注意到这一事实的地方是beej 的网络编程指南中的第 9.7 节,但即使没有解释为什么要这样输入。

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

4

1 回答 1

2

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

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

于 2012-11-22T13:46:03.860 回答