编译器在调用sendto时警告参数6

时间:2016-10-20 05:28:44

标签: c sockets udp

socklen_t clilen; // declaration

n = sendto(sockfd1, buffer, sizeof(buffer), 0, (struct sockaddr *)&cli_addr, &clilen);
if(n < 0)
{
    printf("\nERROR writing to socket\n");
    exit(0);
} 

在编译我的代码时,它会给我一个警告,如.....

warning: passing argument 6 of ‘sendto’ makes integer from pointer without a cast [enabled by default]
n = sendto(sockfd1, buffer, sizeof(buffer), 0, (struct sockaddr *)&cli_addr, &clilen);

怎么办?

2 个答案:

答案 0 :(得分:4)

试试

socklen_t

我认为最后一个参数类型是 connectionResult.startResolutionForResult(this, 1); 并且它不是指针,因此您不需要传递变量的地址;只是传递变量本身它会起作用,不会像现在这样给出任何警告。

答案 1 :(得分:1)

原型是

ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,const struct sockaddr *dest_addr, socklen_t addrlen);

所以最后一个参数不是指针而是类型为socklen_t的整数 所以只需传递一个(socklen_t) sizeof (struct sockaddr)就可以了。它说它是第6个参数,但你正在第5个参数。