【C语言】判断ipv4地址是否合法

最基础的方法判断点分十进制ipv4地址,直接上源码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int verify_ip(const char *ip)
{
    int len = strlen(ip);

    /* 检测ip地址每组字符长度 */
    if ((3 < len) || (1 > len))
    {
        return 0;
    }

    /* 检测起始位为0 */
    if (('0' == ip[0]) && (1 < len))
    {
        return 0;
    }

    /* 检测单个字符 */
    for (int i = 0; i < len; i++)
    {
        if (('0' > ip[i]) || ('9' < ip[i]))
        {
            return 0;
        }
    }

    /* 检测范围 */
    int val = atoi(ip);
    if ((0 > val) || (255 < val))
    {
        return 0;
    }

    return 1;
}

int check_ipv4_validity(const char *ipv4)
{
    int ind = 0;
    int point_num = 0;
    int len = strlen(ipv4);
    char ip[256];
    memset(ip, 0, sizeof(ip));

    /* 检测地址首位字符 */
    if ('.' == ipv4[0])
    {
        return 0;
    }

    for (int i = 0; i < len; i++)
    {
        if ('.' != ipv4[i])
        {
            ip[ind] = ipv4[i];
            ind++;
        }
        else
        {
            ind = 0;
            point_num++;
            if (!verify_ip(ip))
            {
                return 0;
            }
            memset(ip, 0, sizeof(ip));
        }
    }
    if (!verify_ip(ip))
    {
        return 0;
    }

    /* ip分段太多或太少 */
    if (point_num != 3)
    {
        return 0;
    }

    return 1;
}

int main()
{
    char ipv4[18] = { 0 };

    while (1)
    {
        printf("input ipv4 address:");
        scanf("%s", ipv4);
        if (check_ipv4_validity(ipv4))
        {
            printf("ipv4 address is valid.\n");
        }
        else
        {
            printf("invalid ipv4 address.\n");
        }
    }

    return 0;
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值