inet_ntoa warning: format '%s' expects type 'char *', but argument 2 has type 'int'

原文地址:http://1023mmmm.blog.163.com/blog/static/388402252013710103029193/

原本在ubuntu10.04运行好好的程序。换到12版本原先的警告就变成了一大堆错误。

好吧好吧,挨个修改修改。but段错误了有木有


最后定位到inet_ntoa。but这是系统函数,我的参数绝对木有错误有木有,百度了下,幸好有人跟我翻了一样的错误
问题解决的原因堪称奇葩:
http://www.cnblogs.com/renhao/archive/2012/03/08/2385194.html

直接把人家的东西复制过来吧,

以下是转来的:

发现出错在 inet_ntoa 那一行。查看了 inet_ntoa 的帮助,没有发现什么特别的地方。

试着打开编译的warning开关看看有没有什么发现:
 
  1. [shengkui@uranus ~]$ gcc -g -o getaddr getaddr.c -Wall
  2. getaddr.c: In function 'get_host_ip':
  3. getaddr.c:26: warning: implicit declaration of function 'inet_ntoa'
  4. getaddr.c:26: warning: format '%s' expects type 'char *', but argument 2 has type 'int'
inet_ntoa 没有声明,是因为没有加必须的头文件。
inet_ntoa 的返回值是 “char *”, 而编译器似乎把它的返回值当成了int?是这个导致的错误吗?
在64位的Linux 下,int是32位的,而指针(在这里是 char *)是64位的。问题应该就是出在这里!
 
我把 inet_ntoa 需要的头文件加上去:
  1. #include <sys/socket.h>
  2. #include <netinet/in.h>
  3. #include <arpa/inet.h>
编译,运行,结果正确,没有段错误!

笔者按:上面描述了一个发现问题解决问题的方案,发现错误后原作者加了-Wall选项,编译后多了一条warning: implicit declaration of function 'inet_ntoa'的提示,笔者看到这个问题准备自己解决“inet_ntoa 的返回值是 “char *”, 而编译器似乎把它的返回值当成了int?是这个导致的错误吗?”纠结了半天,也想过加上-Wall选项,但是感觉-Wall只是提示警告,现在警告已经有了,没想到加上多了个警告提示,这个提示正式解决问题的方法。
阅读更多
个人分类: linux
上一篇客户端调用bind的作用及UDP客户端调用connect的问题
下一篇关于syslog
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭