ZBLOG

C编写一个函数来验证输入的字符串是否为有效的ipv4或者ipv6的地址

以下是一个使用C语言编写的函数,用于验证输入的字符串是否为有效的IPv4或IPv6地址。

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

int validateIP(char* ip) {
    // 检查是否为IPv4地址
    if (strchr(ip, ':') == NULL) {
        // IPv4地址检查
        int num, dots = 0;
        char *token;

        token = strtok(ip, ".");
        
        while(token != NULL) {
            if (dots > 3) {
                return 0; // 由于IPv4地址只能有3个点分隔符,所以超过3个则无效
            }
            
            num = atoi(token);
            
            if (num < 0 || num > 255 || (num == 0 && strcmp(token, "0") != 0)) {
                return 0; // 数字范围不合法,无效
            }

            dots++;
            token = strtok(NULL, ".");
        }
        
        if (dots != 3) {
            return 0; // 点分隔符数量不合法,无效
        }

        return 1; // 是有效的IPv4地址
    }
    else {
        // IPv6地址检查
        int colons = 0;
        char *token;

        token = strtok(ip, ":");

        while(token != NULL) {
            if (colons > 7) {
                return 0; // IPv6地址中只能有7个冒号分隔符,所以超过7个则无效
            }

            size_t len = strlen(token);
            
            if (len > 4) {
                return 0; // 每个部分长度不能超过4个字符,无效
            }

            for (int i = 0; i < len; i++) {
                if ((token[i] >= '0' && token[i] <= '9') || (token[i] >= 'a' && token[i] <= 'f')
                    || (token[i] >= 'A' && token[i] <= 'F')) {
                    continue;
                }
                else {
                    return 0; // 部分包含非十六进制字符,无效
                }
            }

            colons++;
            token = strtok(NULL, ":");
        }

        if (colons != 7) {
            return 0; // 冒号分隔符数量不合法,无效
        }

        return 1; // 是有效的IPv6地址
    }
}

int main() {
    char ip[40];

    printf("请输入要验证的IP地址: ");
    scanf("%s", ip);

    int valid = validateIP(ip);

    if (valid) {
        printf("输入的IP地址是有效的。\n");
    }
    else {
        printf("输入的IP地址无效。\n");
    }

    return 0;
}

使用该函数,你可以输入一个字符串作为要验证的IP地址,并将返回结果打印出来。如果返回值为1,则表示该字符串是有效的IPv4或IPv6地址;如果返回值为0,则表示该字符串是无效的。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=1839

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?