关于编译器的变量地址的问题

reen 2005-05-17 10:42:51
源码如下:
struct contain
{
char *saddr;
char *daddr;
int ttl;
int id;
};
struct header
{
char *saddr;
char *daddr;
int ttl;
int id;
int dport;
};

在主函数main()中定义了两个变量
struct header h;
struct contain con;
对他们的赋值分别如下
h.saddr=p.GetSourceIP();//在抓到第一个网络数据包时赋值
con.saddr=p.GetSourceIP();//在抓到第二个网络数据包时赋值

GetSourceIP()的原形如下
char *PacketDecode::GetSourceIP()
{
return inet_ntoa(*(in_addr*)&(ih->saddr));//ih 是已经获得的网络数据包头
}

问题如下:
每次对con.saddr赋值时 h.saddr也会发生同样的变化
观察发现 con.saddr 和 h.saddr 会地址一样
难道编译器会将两个变量给同一个地址?
...全文
55 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
boodweb 2005-05-17
  • 打赏
  • 举报
回复

自己开辟一块内存来保存

char *PacketDecode::GetSourceIP()
{
char * ip=inet_ntoa(*(in_addr*)&(ih->saddr));//ih 是已经获得的网络数据包头
char * myip = malloc(strlen(ip)+1);
strncpy(myip, ip, strlen(ip)+1);
return myip;
}

怎么释放就自己想办法解决了
reen 2005-05-17
  • 打赏
  • 举报
回复
不好意思
请问应该在哪里保存
在函数返回前还是返回后了?
不好意思 我实在是菜 能否给出具体说明
boodweb 2005-05-17
  • 打赏
  • 举报
回复
另外一般出错不可能是编译器的问题,呵呵
boodweb 2005-05-17
  • 打赏
  • 举报
回复
inet_ntoa是系统函数,系统可能在两次调用使用的相同的内存区域,将返回内容保存起来是你的责任

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧