最基础的方法判断点分十进制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;
}