我是靠谱客的博主 笨笨小白菜,这篇文章主要介绍inet_ntop()、inet_pton()、inet_addr()、inet_ntoa()函数之间的关系,现在分享给大家,希望可以做个参考。

- emmmmm,先看这张图来理解,知道这些函数的作用

在这里插入图片描述

1. inet_pton()源码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
int inet_pton(int family, const char *strptr, void *addrptr) { if (family == AF_INET) { struct in_addr in_val; if (inet_aton(strptr, &in_val)) { memcpy(addrptr, &in_val, sizeof(in_val)); return (1); } } errno = EAFNOSUPPOPT; return (-1); }

2. inet_ntop()源码

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len) { const u_char *p = (const u_char*)addrptr; if (family == AF_INET) { char temp[INET_ADDRSTRLEN]; snprintf(temp, sizeof(temp), "%d.%d.%d.%d", p[0], p[1], p[2], p[3]); if (strlen(temp) >= len) { errno = ENOSPC; rturn (NULL); } strcpy(strptr, temp); return (strptr); } errno = EAFNOSUPPOPT; return (NULL); }

3. inet_addr()

转换网络主机地址(点分十进制)为网络字节序二进制值,如果参数 char *cp 无效则返回-1(INADDR_NONE),但这个函数有个缺点:在处理地址为255.255.255.255时也返回-1,虽然它是一个有效地址,但inet_addr()无法处理这个地址。

复制代码
1
2
in_addr_t inet_addr(const char *cp);

4. inet_ntoa()------->静态函数

inet_ntoa()函数转换网络字节序地址->标准的点分十进制地址。该函数返回值指向保存点分十进制的字符串地址的指针,该字符串的空间为静态分配 的,所以在第二次调用这个函数时,意味着上一次调用并保存的结果将会被覆盖(重写)。so creazy!!!

复制代码
1
2
char *inet_ntoa(struct in_addr in);

好了那就来证实一下,inet_ntoa()的静态返回值吧!!

复制代码
1
2
3
4
5
6
7
8
9
char *add1,add2; src.sin_addr.s_addr = inet_addr("192.168.1.123"); add1 =inet_ntoa(src.sin_addr); src.sin_addr.s_addr = inet_addr("192.168.1.124"); add2 = inet_ntoa(src.sin_addr); printf("a1:%sn",add1); printf("a2:%sn",add2);

最终的printf结果是:
a1:192.168.1.124
a2:192.168.1.124

- 这样来看的话,我认为如果有需要最好是用inet_pton()、inet_ntop()代替inet_ntoa()、inet_addr().

复制代码
1
2
3
4
5
用 inet_pton(AF_INET, cp, &src.sin_addr); 代替 src.sin_addr.s_addr = inet_addr(cp);
复制代码
1
2
3
4
5
用 char str[INET_ADDRATRLEN]; ptr = inet_ntop(AF_INET, &src.sin_addr, str, sizeof(str)); 代替 ptr = inet_ntoa(src.sin_addr);

 (478条消息) inet_ntop()、inet_pton()、inet_addr()、inet_ntoa()函数之间的关系_lockin.的博客-CSDN博客_inet_addr

最后

以上就是笨笨小白菜最近收集整理的关于inet_ntop()、inet_pton()、inet_addr()、inet_ntoa()函数之间的关系的全部内容,更多相关inet_ntop()、inet_pton()、inet_addr()、inet_ntoa()函数之间内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部