我有这个密码:

struct hostent *host;
struct hostent *serverHost;
if ((host = gethostbyname(param.ipadress)) == NULL)
{
  return -1;
}
if ((serverHost = gethostbyname(param.dnsserver)) == NULL)
{
  return -1;
}

现在当我尝试host->h_addr时,它包含param.dnsserver中的地址。怎么了?我做错什么了?

最佳答案

gethostbynamegethostbyaddr是不应再使用的旧函数。
对于他们的POSIX (2004) description
gethostbyaddr()和gethostbyname()函数可以返回指向静态数据的指针,这些指针可能会被随后对这些函数的调用所覆盖。
这意味着您需要在后续调用之前从返回值中复制所需的部分。
另外:
gethostbyaddr()和gethostbyname()函数可能在将来的版本中被撤回。
事实上,它们已经不在POSIX 2008中了。
替代品包括:
与gethostbyaddr()和gethostbyname()函数相比,getaddrinfo()getnameinfo()函数更受欢迎。

关于c - 如何在代码中两次使用gethostbyname,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13259039/

10-11 23:17