c语言校验ipv4地址是否合法,ipv4校验和

发布时间:2022-11-30

本文目录一览:

  1. 判断字符串是否是合法的ipv4地址
  2. C语言 问题 C: IP地址的合法性检查?
  3. 如何用C语言判断ip地址是否合法

判断字符串是否是合法的ipv4地址

public static boolean Isipv4(String ipv4){
    if(ipv4 == null || ipv4.length() == 0){
        return false; //字符串为空或者空串
    }
    String[] parts = ipv4.split("\\."); //因为java doc里已经说明, split的参数是reg, 即正则表达式, 如果用"|"分割, 则需使用"\\|"
    if(parts.length != 4){
        return false; //分割开的数组根本就不是4个数字
    }
    for(int i = 0; i < parts.length; i++){
        try{
            int n = Integer.parseInt(parts[i]);
            if(n < 0 || n > 255){
                return false; //数字不在正确范围内
            }
        }catch (NumberFormatException e) {
            return false; //转换数字不正确
        }
    }
    return true;
}

C语言 问题 C: IP地址的合法性检查?

#include stdio.h
int isVaildIp(char *ip) {
    int dots = 0; /*字符.的个数*/
    int setions = 0; /*ip每一部分总和(0-255)*/
    if (NULL == ip || *ip == '.') { /*排除输入参数为NULL, 或者一个字符为'.'的字符串*/
        return 0;
    }
    char *p = ip;
    while (*p) {
        if (*p == '.') {
            dots ++;
            if (setions >= 0 && setions <= 255) { /*检查ip是否合法*/
                setions = 0;
                p++;
                continue;
            }
            return 0;
        }
        else if (*p >= '0' && *p <= '9') {
            if (p != ip && *(p - 1) == '0' && *(p - 2) == '.')
                return 0; /*判断是不是数字*/
            setions = setions * 10 + (*p - '0'); /*求每一段总和*/
        }
        else
            return 0;
        p++;
    }
    if (setions >= 0 && setions <= 255) {
        if (dots == 3) {
            return 1;
        }
    }
    return 0;
}
int main(void) {
    int n;
    scanf("%d", n);
    getchar();
    while (n--) {
        char s[100];
        scanf("%s", s);
        if (isVaildIp(s))
            puts("YES");
        else
            puts("NO");
    }
    return 0;
}

如何用C语言判断ip地址是否合法

可以试一下

#include stdio.h
int checkIP(const char* p)
{
    int n[4];
    char c[4];
    if (sscanf(p, "%d%c%d%c%d%c%d%c",
               n[0], &c[0], n[1], &c[1],
               n[2], &c[2], n[3], &c[3])
        == 7)
    {
        int i;
        for(i = 0; i < 3; ++i)
            if (c[i] != '.')
                return 0;
        for(i = 0; i < 4; ++i)
            if (n[i] > 255 || n[i] < 0)
                return 0;
        return 1;
    } else {
        return 0;
    }
}
int main()
{
    const char* x[] = {
        "192.168.1.1",
        "10.0.0.1.",
        "127.256.0.1",
        "iugerjiogjioe",
        "172.16,0.1",
        0
    };
    const char* m[] = {
        "不是合法的IP地址",
        "是合法的IP地址"
    };
    int i = 0;
    while(x[i] != 0) {
        printf("%s %s\n", x[i], m[checkIP(x[i])]);
        ++i;
    }
    return 0;
}