我在编译warning
模拟时收到以下client - server UDP socket
:
警告:传递' int *'参数类型' socklen_t *' (又名 ' unsigned int *') 将指针转换为具有不同符号[-Wpointer-sign]
的整数类型
这是有关的代码:
#define BUFLEN 2048
struct sockaddr_in myaddr, remaddr;
int fd, recvlen, slen=sizeof(remaddr);
...
char response[BUFLEN];
recvlen = recvfrom(fd, response, BUFLEN - 1, 0, (struct sockaddr *)&remaddr, &slen);
我一直在引用罗格斯大学的教程。我对于为什么会出现此警告(它希望我使用socklen_t *
)有一个公平的想法,但我想问SO社区。 p>
答案 0 :(得分:1)
它要我使用
socklen_t *
正确。
为什么会出现此警告?
因为您没有使用socklen_t
。
我怎样摆脱它?
将slen
声明为socklen_t
。
答案 1 :(得分:1)
为什么会出现此警告?
警告正在发生,因为socklen_t
是无符号类型,int
是签名类型(如诊断所示)。因此,原则上,指向的值可以被recvfrom()
不同于被呼叫者解释。实际上,只要使用地址struct
的长度的正确值,GCC编译的代码就不会发生这种差异,但GCC无法在编译时检查它。
我怎样摆脱它?
传递正确类型的参数。