C语言 'getaddrinfo' 从整数生成指针,不带强制转换 [默认启用]



我的程序有以下警告,因此我认为出现了核心转储分段错误:

warning: passing argument 2 of ‘getaddrinfo’ makes pointer from integer without a cast [enabled by default] 
rc = getaddrinfo(svrHost, svrPort, &hints, &res);
                           ^
In file included from client6_main.c:16:0:
/usr/include/netdb.h:662:12: note: expected ‘const char * restrict’ but argument is of type ‘short unsigned int’
extern int getaddrinfo (const char *__restrict __name,

代码段为:

rc = getaddrinfo(svrHost, svrPort, &hints, &res);
if(rc != 0){
    printf("Host not found --> %sn", gai_strerror(rc));
    if (rc == EAI_SYSTEM)
        perror("getaddrinfo() failed");
}

请指导

您需要将服务名称或端口号作为十进制字符串作为getaddrinfo调用的第二个参数。

为此,只需将变量svrPort的类型从 unsigned short 更改为 char*char const* ,并使其指向有效的字符串。

例如,"http""80"而不是80

前两个函数参数应该是指向字符串的指针。

int getaddrinfo(const char *node, 
                const char *service,
                const struct addrinfo *hints,
                struct addrinfo **res);

我假设从您收到的警告中svrPort属于 int 型.编译器会将此视为指针。如果svrPort初始化为 1234则函数将查找从地址 1234 开始的字符串,该字符串可能是也可能不是有效地址。

你可能应该通过NULL0来告诉getaddrinfo忽略这个论点。

相关内容

  • 没有找到相关文章

最新更新