概述
问题背景:
我在提取网络层数据时需要进行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进行网络地址到字符地址转换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复