在C语言中,判断一个字符串是否是合法的IP地址通常涉及到解析字符串并检查其组成部分是否符合IP地址的规范。IPv4地址由四个0到255之间的数字组成,它们通过点(.
)分隔。以下是一个简单的C语言函数,用于检查一个字符串是否是合法的IPv4地址:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int isValidIpAddress(char *ipAddress) {
int num, dots = 0;
char *ptr;
if (ipAddress == NULL)
return 0;
ptr = strtok(ipAddress, "."); // 切割IP地址
if (ptr == NULL)
return 0;
while (ptr) {
// 检查子字符串是否是数字
if (!isdigit(*ptr))
return 0;
// 将子字符串转换为数字
num = atoi(ptr);
// 检查数字是否在0到255之间
if (num >= 0 && num <= 255) {
// 找到下一个子字符串
ptr = strtok(NULL, ".");
if (ptr != NULL)
dots++; // 增加点的计数
} else
return 0;
}
// 确保有3个点(即4个数字)
if (dots != 3)
return 0;
return 1;
}
int main() {
char ip1[] = "192.168.1.1";
char ip2[] = "256.1.1.1";
printf("%s is a valid IP address? %s\n", ip1, isValidIpAddress(ip1) ? "Yes" : "No");
printf("%s is a valid IP address? %s\n", ip2, isValidIpAddress(ip2) ? "Yes" : "No");
return 0;
}
注意:strtok
函数会修改原始字符串,因此如果原始字符串需要保留,你应该在调用isValidIpAddress
之前先复制一份。
这个函数首先使用strtok
函数来分割输入的IP地址字符串,然后检查每个分割出来的子字符串是否都是数字,并且转换为整数后是否在0到255之间。最后,它还检查点的数量是否正确(IPv4地址中应该有3个点,即4部分数字)。
如果你需要检查的是一个IP地址数组,你可以对数组中的每个元素调用这个函数。如果数组中的所有IP地址都是合法的,这个函数将返回1;如果有任何一个不合法,它将返回0。