以下是一个使用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助手提供,问题来源于学员提问