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

转载 2013年12月05日 16:29:10

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

inet_ntoa编译提示警告: 格式 ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

今天在做Linux下广播的时候,在编译期间inet_ntoa函数报警告: 格式 ‘%s’ expects argument of type ‘char *’, but argument 2 has...
  • dingfengen
  • dingfengen
  • 2016年06月24日 18:02
  • 2587

warning: format ‘%s’ expects argument of type ‘char *’和warning: backslash and newline separated by

关于程序中产生的警告: 1,echoserv.c:49:2: warning: format ‘%s’ expects argument of type ‘char *’, but argument ...
  • msdnwolaile
  • msdnwolaile
  • 2016年05月27日 09:18
  • 2057

[C/C++]warning: format '%c' expects argument of type 'char*', but argument 2 has type 'int' [-Wforma

format '%c' expects argument of type 'char*', but argument 2 has type 'int'
  • poleness
  • poleness
  • 2014年05月28日 16:26
  • 3625

解决 format ‘%x’ expects type ‘unsigned int’, but argument 2 has type ‘int *’

[root@CC c]# gcc MemTest.c -o MemTest1 -Wall MemTest.c: In function ‘main’: MemTest.c:24: warning:...
  • Richmond2012
  • Richmond2012
  • 2014年11月05日 23:04
  • 1797

g++编译报错原因分析 format ?.d?.expects argument of type ?.nt?. but argument 3 has type ?.

这是我工作时在linux环境下C++编译出现过的警告: warning: format ?.d?.expects argument of type ?.nt?. but argument 3 has ...
  • oguro
  • oguro
  • 2016年09月28日 20:59
  • 1149

linux c之提示format‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat

1、问题 有个long int data;我输出的时候printf("data is %d", data);出现下面警告 自己竟然不知道 长整型怎么打印出来,日了狗。 2、解决办法 ...
  • u011068702
  • u011068702
  • 2017年02月17日 10:14
  • 3994

jni编译时出现:warning: format '%d' expects argument of type 'int', but argument 4 has

原因:在进行jni编译时,Application.mk中APP_PLATFORM的版本太低导致,如下: #APP_ABI := armeabi armeabi-v7a x86 mips arm...
  • cffishappy
  • cffishappy
  • 2016年08月25日 10:17
  • 1237

编译告警:“warning: format '%d' expects type 'int', but argument 4 has type 'unsigned long'”

  • u011804580
  • u011804580
  • 2014年03月28日 10:18
  • 1517

【C】刚开始学习C 的几个小错误

warning: format ‘%d’ expects a matching ‘int’ argument [-Wformat=] 打印语句 “ 结束后忘记写 ,导致。 warning:...
  • Mokill0911
  • Mokill0911
  • 2014年06月10日 02:35
  • 1119

sizeof(size_t)的疑惑||size_t sizeof long unsigned int printf max value

今天自己用了一个sizeof(指针),用了printf("%d“,sizeof(指针))。出现了错误:warning: format ‘%d’ expects type ‘int’, but argu...
  • zhangleiyigeren
  • zhangleiyigeren
  • 2011年09月07日 00:56
  • 4868
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:inet_ntoa warning: format '%s' expects type 'char *', but argument 2 has type 'int'
举报原因:
原因补充:

(最多只允许输入30个字)