philarlala 发表于 2016-08-01 11:37

inet_ntoa,inet_ntop 函数疑问

通过accept 获取到cliaddr,然后打印
printf("Welcome %shere!\n", inet_ntoa(cliaddr.sin_addr));
printf("Welcome %shere!\n", inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(buf));
通过以上两种方式打印都会出现segment fault 错误

如果先inet_ntop(AF_INET,&cliaddr.sin_addr,buf,sizeof(buf),然后打印buf ,ip地址就不是client 的ip
printf("Welcome %shere!\n", buf);

通过网上查资料说,在64位的机器下,需要<arpa/inet.h> 头文件,添加头文件,编译运行正确。

疑问:
1.inet_ntoa,inet_ntop ,都是在arpa/inet.h 头文件下的,为什么没有使用这个头文件,编译不报错
2.尝试过判断inet_ntop,inet_ntoa的返回值,是否为NULL,编译的时候有warning 提示comparison between pointer and integer,
   为什么inet_ntop,inet_ntoa的返回值是int的?跟man 出来的结果不一样的,难道是有其他地方有定义?
   加上<arpa/inet.h>头文件就没有warning 了

hellioncu 发表于 2016-08-01 11:44

没申明,缺少返回值是int
页: [1]
查看完整版本: inet_ntoa,inet_ntop 函数疑问