栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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#
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604905.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号