使用inet_ntop时二级指针结构体成员取地址的正确语法是什么
语法错误修正方案
你错误的核心是取地址符&的放置位置不符合C语言成员访问规则,正确的参数写法为:&(*arg1)->myaddr.sin_addr
规则说明
C语言中->运算符优先级高于取地址符&,上述表达式会先执行(*arg1)->myaddr.sin_addr拿到目标地址变量,再对整体取地址,完全匹配inet_ntop第二个参数要求传入网络地址指针的调用规则,同时完全保留你要求的二级指针传参逻辑。
完整修正代码
你现有代码还存在其他几处语法问题,一并修正后完整代码如下:
#include <arpa/inet.h> struct random_struct { struct sockaddr_in myaddr; }; void do_some_stuff(struct random_struct **arg1) { (*arg1)->myaddr.sin_family = AF_INET; char buffer[INET_ADDRSTRLEN]; inet_ntop((*arg1)->myaddr.sin_family, &(*arg1)->myaddr.sin_addr, buffer, sizeof(buffer)); }
其他修正点说明
- 结构体
struct random_struct定义末尾补充分号 - 变量赋值行末尾补充分号
- 修正
inet_ntop调用中多余的右括号,补充分号 - 函数参数的结构体类型前补充
struct关键字(C语言原生要求,若之前有typedef定义可忽略) - 补充必要的头文件引用
#include <arpa/inet.h>避免隐式声明报错
内容的提问来源于stack exchange,提问作者user13931033
相关产品推荐
相关产品推荐

