'getaddrinfo'在没有强制转换的情况下从整数生成指针[默认启用]

时间:2016-04-24 08:23:22

标签: c sockets casting segmentation-fault

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

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 --> %s\n", gai_strerror(rc));
    if (rc == EAI_SYSTEM)
        perror("getaddrinfo() failed");
}

请指导

2 个答案:

答案 0 :(得分:1)

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

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

例如,"http""80"代替80

答案 1 :(得分:1)

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

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

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

您应该通过NULL0告诉getaddrinfo忽略此论点。