当前位置: 技术问答>linux和unix
强制类型转换时一个莫名奇妙的错误,
来源: 互联网 发布时间:2016-05-19
本文导语: 在学习getaddrinfo函数的用法时,时如果写成 struct sockaddr_in tempaddr; tempaddr=(struct sockaddr_in) aip->ai_addr; //aip是getaddrinfo返回的值 inet_ntop(AF_INET,(struct in_addr *)(&(tempaddr.sin_addr)),abuf,INET_ADDRSTRLEN); 就会报错 conversion to...
在学习getaddrinfo函数的用法时,时如果写成
就会报错 conversion to non-scalar type requested;
但是如果改成
编译就可以通过,两种方式就差一个地方一个是通过结构体变量的名字在使用.成员运算符引用成员,另一个使用指针并使用->引用成员,个人感觉两种都没什么问题啊,为什么会报错呢。
struct sockaddr_in tempaddr;
tempaddr=(struct sockaddr_in) aip->ai_addr; //aip是getaddrinfo返回的值
inet_ntop(AF_INET,(struct in_addr *)(&(tempaddr.sin_addr)),abuf,INET_ADDRSTRLEN);
就会报错 conversion to non-scalar type requested;
但是如果改成
struct sockaddr_in * tempaddr;
tempaddr=(struct sockaddr_in *) aip->ai_addr;
inet_ntop(AF_INET,(struct in_addr *)(&(tempaddr->sin_addr)),abuf,INET_ADDRSTRLEN);
编译就可以通过,两种方式就差一个地方一个是通过结构体变量的名字在使用.成员运算符引用成员,另一个使用指针并使用->引用成员,个人感觉两种都没什么问题啊,为什么会报错呢。
|
aip->ai_addr 是 struct sockaddr * 类型,是个sockaddr结构指针,当然不能转为sockaddr_in结构类型。
但是可以强制转为struct sockaddr_in * 类型,即sockaddr_in结构指针。
但是可以强制转为struct sockaddr_in * 类型,即sockaddr_in结构指针。