inet_ntoa()返回整型参数,开玩笑?!

今天写socket程序,想在连接时打印出IP地址,于是查询得知可以使用inet_ntoa()函数

函数相关说明如下:

        函数声明:char *inet_ntoa (struct in_addr);

  返回点分十进制的字符串在静态内存中的指针。

于是在我的代码中加入:

printf("%s join in!\n", inet_ntoa(clientSockaddr.sin_addr)); //84行

重新编译却出现了一个很奇怪的问题:

jimmy@MyPet:~$ gcc -o server server.c 
server.c: In function ‘main’:
server.c:84:5: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]
jimmy@MyPet:~$ 

告诉我说inet_ntoa()返回整型参数,开玩笑?!难道是函数说明错了吗,我多方查证后它确实该返回字符串指针,可是gcc又提示我它确实返回整型。

最后悲剧地发现问题出在头文件上,必须在头文件中定义

#include<arpa/inet.h>

再编译,没有错误。


以上:

其一说明inet_ntoa()这个函数很奇特,就算没有包含对应的头文件居然也有被定义,可能是其他头文件中的内容。

其二说明读函数说明一定要仔细/全面,不能看得一知半解就开始使用,最后绕一大圈发现是使用方法不对确实大费周折了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值