我是靠谱客的博主 结实板栗,最近开发中收集的这篇文章主要介绍使用inet_ntop替换inet_ntoa进行网络地址到字符地址转换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

问题背景:

我在提取网络层数据时需要进行IP地址到点十分地址的时候使用inet_ntoa函数进行输出转换,但是我在同一个输出里面调用inet_ntoa分别对源IP和目的IP进行转换时输出的结果是一样的。我保证了我的源IP和目的IP是不同的,结果却让我很诧异

	 printf("%s,%s",inet_ntoa(addr[0]),inet_ntoa(addr[1]));
	 //输出结果 192.168.17.2, 192.168.17.2
后来查找资料发现,inet_ntoa的结果是保存在静态内存当中的,上面的输出代码返回的是同一个栈的数据,后面一个inet_ntoa会将前一个的数据进行覆盖导致数据错误。

解决方案:

1.将inet_ntoa的数据复制出来保存使用

2.使用inet_ntop函数指定参数进行转换

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
样例(来源百度百科):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
int main (void)
{
char IPdotdec[20]; //存放点分十进制IP地址
struct in_addr s; // IPv4地址结构体
// 输入IP地址
printf("Please input IP address: ");
scanf("%s", IPdotdec);
// 转换
inet_pton(AF_INET, IPdotdec, (void *)&s);
printf("inet_pton: 0x%xn", s.s_addr); 
// 反转换
inet_ntop(AF_INET, (void *)&s, IPdotdec, 16);
printf("inet_ntop: %sn", IPdotdec);
}

最后

以上就是结实板栗为你收集整理的使用inet_ntop替换inet_ntoa进行网络地址到字符地址转换的全部内容,希望文章能够帮你解决使用inet_ntop替换inet_ntoa进行网络地址到字符地址转换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部