我的程序有以下警告,因为我认为出现了核心转储分段错误错误:
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");
}
请指导
答案 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开始的字符串,该字符串可能是也可能不是有效地址。
您应该通过NULL
或0
告诉getaddrinfo
忽略此论点。