【问题标题】:How to access members for struct in struct - C如何在struct-C中访问struct的成员
【发布时间】:2012-03-08 04:33:50
【问题描述】:
struct sniff_ip {
struct in_addr ip_src, ip_dst;
}

function{
const struct sniff_ip *ip;
ip = (struct sniff_ip*)(packet +SIZE_ETHERNET);

}

我的目标是更改 ip_src 和 ip_dst 的值,但是当 src 或 dst 位于结构内的结构中时,我无法弄清楚修改 src 或 dst 的正确语法。我知道访问结构中的成员通常是 ip->member 或 (*ip).member ,但这似乎对我不起作用。如果成员位于结构内的结构中,访问成员的正确过程是什么?

编辑:我想更改 src 和 dst 的 IP 地址(值)。使用

等行时

"ip->ip_src="
要么 "ip->ip_src.s_addr=" ,我得到的错误是 "分配只读位置'*ip'

【问题讨论】:

  • 您声明了const struct,因此不允许您进行分配。如果您想分配给它,请不要将您的结构声明为const 或做struct sniff_ip * const ip
  • 所以我可以改变ip,但不能改变ip里面的成员?
  • 我可以去尝试写一个解释,但最好还是看看这个article
  • 只是一个问题,但是如果您想更改 ip_srcip_dst 的值,为什么要声明 *ip const 呢?
  • 这是一个作业,大部分代码都准备了一些空白点。我被告知要在所有对象都已声明和初始化时填写空白。我不知道某些结构的初始化方式可能是错误的

标签: c


【解决方案1】:

您只需将运算符组合在正确的位置:

ip->ip_src.s_addr

【讨论】:

  • 在这种情况下,我应该更改 src 和 dst 的 IP 地址。但是,一旦编译,它就会显示错误:“assignment of read-only location '*ip'” 这是语法问题吗?
【解决方案2】:
struct in_addr other_addr;
ip->ip_src = other_addr;

【讨论】:

  • 我以为你的意思是 struct in_addr ip_src, ip_dst, other_addr;这不起作用,因为它说 other_addr 未声明。
  • @krikana 不,我的意思是“如果你有一个名为 other_addrstruct in_addr 和一个名为 ipstruct sniff_ip*,你可以使用 ip->ip_src = other_addr 分配给 ip_src ip的成员。
  • 好的。我试过你的程序,但我仍然收到分配只读位置'*ip'的错误
  • @krikara 你标记了const 的东西吗? ipstruct sniff_ip*(注意非常重要的星号)吗?
  • 我的所有代码都显示在主帖中。 const struct sniff_ip ip;至于初始化的ip = (struct sniff_ip)(packet +SIZE_ETHERNET);
【解决方案3】:

你的问题是:

const struct sniff_ip *ip;

代替:

struct sniff_ip const *ip = ...;

在您当前的声明中,您有 ip,一个指向 const 类型为 struct sniff_ip 的数据的指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2019-08-28
    相关资源
    最近更新 更多