【发布时间】:2019-09-22 09:20:45
【问题描述】:
在使用套接字的文档中有hostent 结构的描述:https://www.gnu.org/software/libc/manual/html_node/Host-Names.html#Host-Names
对于h_addr_list 字段,它表示它是一个以空指针终止的向量。
所以,我尝试做的是:
struct in_addr *addr = (struct in_addr *)hostent->h_addr_list[0];
while (addr != NULL) {
// ...
addr++;
}
我预计addr 变量在到达向量中的最后一个元素时为 NULL,因为该元素应该是 NULL 指针。
但在实践中,这不会发生。 addr 永远不会变成 NULL。
// hostent->h_addr_list contains 4 meaningful elements
struct in_addr *addr = (struct in_addr *)hostent->h_addr_list[0];
addr++;
addr++;
addr++;
addr == (struct in_addr *)hostent->h_addr_list[3]; // true
addr++;
// here I expected addr to be NULL to terminate the vector, but...
NULL == addr; // false!!!
addr == (struct in_addr *)hostent->h_addr_list[4]; // false
// just to check that it actually NULL terminated
NULL == hostent->h_addr_list[4]; // true
addr = (struct in_addr *)hostent->h_addr_list[4];
NULL == addr; // true
那么,为什么会这样呢?
我做错了什么?
谢谢。
【问题讨论】:
-
你不能通过增加指针使其变为 NULL。
标签: c vector null-pointer