关闭

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

1037人阅读 评论(0) 收藏 举报
分类:

原文地址: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只是提示警告,现在警告已经有了,没想到加上多了个警告提示,这个提示正式解决问题的方法。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:162079次
    • 积分:2692
    • 等级:
    • 排名:第14083名
    • 原创:87篇
    • 转载:98篇
    • 译文:0篇
    • 评论:28条
    文章分类
    最新评论