2012-02-16 71 views
2
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当它在一个struct在一个结构中。我知道访问结构中的成员通常是ip-> member或(* ip).member,但这似乎不适合我。访问成员的正确过程是什么,如果它们在struct中的结构中?如何访问成员在结构结构 - Visual C

编辑:我想改变src和dst的IP地址(值)。当使用线,如

“IP-> ip_src =”
或 “IP-> ip_src.s_addr =”,我得到的错误 “只读位置 '* IP'

+0

你声明了'const struct',所以它不允许你做任务。如果你想分配它,不要将你的结构声明为'contst'或者做'struct sniff_ip * const ip'。 – 2012-02-16 18:56:07

+0

所以我可以改变IP,但不是IP内的成员? – krikara 2012-02-16 19:09:27

+0

我可以去尝试写出一个解释,但是看看这篇文章可能会更好(http://www.codeguru.com/cpp/cpp/cpp_mfc/general/article.php/c6967)代替。 – 2012-02-16 19:13:40

回答

0
的分配
struct in_addr other_addr; 
ip->ip_src = other_addr; 
+0

我以为你的意思是struct in_addr ip_src,ip_dst,other_addr; 这不起作用,因为它说other_addr是未声明的。 – krikara 2012-02-16 18:46:55

+0

@krikana不,我的意思是“如果你有一个名为'other_addr'的struct in_addr'和一个名为'ip'的struct sniff_ip *',你可以使用'ip-> ip_src = other_addr'来分配给'ip_src 'ip'的成员。 – Borealid 2012-02-16 18:50:57

+0

好的。我试过你的程序,但是我仍然得到只读位置赋值的错误'* ip' – krikara 2012-02-16 18:55:18

3

您简单地将运营商在正确的地方:

ip->ip_src.s_addr 
+0

在这种情况下,我应该改变src和dst的IP地址,但是一旦编译,它就会报错:“assign-只有locati '* ip'“ 这是语法问题吗? – krikara 2012-02-16 18:47:31

0

您的问题是:

const struct sniff_ip *ip; 

代替:

struct sniff_ip const *ip = ...; 

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