You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 10:21:03