注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

牧笔临风

己有能,勿自私!

 
 
 

日志

 
 
 
 

inux C inet_ntoa()函数 两次调用返回相同的值  

2013-01-25 09:32:52|  分类: C |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


转自:http://hi.baidu.com/lpbqjylauubagpq/item/093f351f518e1e5a2a3e22b7
刚开始学习时按照书上介绍的去编写一个实现IP地址和域名之间相互解析的功能函数,但是总出现错误,提示warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’,说是这个函数的参数不对头,开始简单的百度了下,因为那个是windows下的,头文件是#include  <winsocket.h>,而且我的参数也完全正确,后来才发现是缺少头文件#include  <netinet/in.h>和#include  <arpa/inet.h>,加上就对了,编译通过另外,对于这个函数,引自http://hi.baidu.com/grdd/blog/item/df518d019d01ebda277fb580.html

一、函数原型

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

char *inet_ntoa(struct in_addr in);

typedef uint32_t in_addr_t;

struct in_addr {
in_addr_t    s_addr;
};

功能:将网络地址转换成“.”点隔的字符串格式。

返回值:若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NVLL。其中的数据应在下一个套接口调用前复制出来。

二、注意问题

in_addr t1,t2;
t1.s_addr=1;
t2.s_addr=2;

char *p1=inet_ntoa(t1);
char *p2=inet_ntoa(t2);


这样你只能的得到2个相同的结果
因为它们用的是同一块空间。

解决办法是每次调用后都把值考走
如:
char p1[20]={0};
strcpy(p1,inet_ntoa(t1));
这样处理就没问题了。

inet_ntoa返回一个char *,而这个char *的空间是在inet_ntoa里面静态分配的,所以inet_ntoa后面的调用会覆盖上一次的调用。

  评论这张
 
阅读(341)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017