linux网络编程笔记--inet-ntoa() 函数的返回值问题以及网络地址有效性的判断

linux网络编程笔记--inet-ntoa() 函数的返回值问题以及网络地址有效性的判断,第1张

linux网络编程笔记--inet-ntoa() 函数的返回值问题以及网络地址有效性的判断

今天学习了唐佐林老师的网络课程,记录一下发现的收获。

1. inet_ntoa
char *inet_ntoa(struct in_addr in); 
// 这个函数返回的指针是一块固定的空间, 使用的时候需要注意防止覆盖

demo :

#include 
#include 
#include 
#include 
#include 
#include 
#include 
int main()
{
    struct in_addr addr1 = {0x08070605};
    struct in_addr addr2 = {0x04030201};
    const char *s1 = inet_ntoa(addr1);
    printf("#line %d,addr1 = %sn",__LINE__,s1);
    const char *s2 = inet_ntoa(addr2);
    printf("#line %d,addr2 = %sn",__LINE__,s2);
    printf("----------------------------------n");
    printf("#line %d,addr1 = %s,pointer = %pn",__LINE__,s1,s1);
    printf("#line %d,addr2 = %s,pointer = %pn",__LINE__,s2,s2);
    printf("----------------------------------n");
    char *s11 = strcpy((char *)malloc(32),inet_ntoa(addr1));
    char *s12 = strcpy((char *)malloc(32),inet_ntoa(addr2));
    printf("#line %d,addr1 = %sn",__LINE__,s11);
    printf("#line %d,addr2 = %sn",__LINE__,s12);
    free(s11);
    free(s12);
}
root@jeason:~/network# g++ ntoa.cpp
root@jeason:~/network# ./a.out
#line 13,addr1 = 5.6.7.8
#line 15,addr2 = 1.2.3.4
----------------------------------
#line 17,addr1 = 1.2.3.4,pointer = 0x7f7c7a443550
#line 18,addr2 = 1.2.3.4,pointer = 0x7f7c7a443550
----------------------------------
#line 22,addr1 = 5.6.7.8
#line 23,addr2 = 1.2.3.4

2. 有更优雅的地址转换方案 ,可以帮助进行地址合法检查
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int main()
{
    struct in_addr addr1;

    if(inet_aton("1.2.3.4",&addr1)){
        printf("#line %d,vaild addr .... addr1 = %xn",__LINE__,addr1.s_addr);
    }else{
        printf("#line %d,invaild addr ....n",__LINE__);
    }
    if(inet_aton("test str",&addr1)){
        printf("#line %d,vaild addr .... addr1 = %xn",__LINE__,addr1.s_addr);
    }else{
        printf("#line %d,invaild addr ....n",__LINE__);
    }
    return 0
}    
root@jeason:~/network# g++ ntoa.cpp
root@jeason:~/network# ./a.out
#line 13,vaild addr .... addr1 = 4030201
#line 20,invaild addr ....
root@jeason:~/network#

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5611051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存