C语言:判断输入一个IP地址字符串是否是合法?

代码如下:

/*********************************************************
*功能:判断输入一个IP地址字符串是否是合法?
*作者:lml   时间:2020年4月15日20:34:40
**********************************************************/

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

int do_judgeIP(char *buf)
{
	int i=0,j=0;
	int num=0,dot=0,dn=0;
	int kdot[3]={0};
	char dip[4]="";

	while(*(buf+i) != '\0')
	{
		//检测是否是3个点,ip都是3个点隔开每个段
		//检测每个段是否为数字
		if(*(buf+i) == '.'){
			kdot[dot] = i;   //记录每个点的位置,下面用到
			dot++;
		}
		if(*(buf+i) != '.'){
			if(*(buf+i)<'0' || *(buf+i)>'9'){
				printf("error!,IP must is number!\n");
				return -1;
			}
		}
		num++;
		i++;
	}
	//判断输入的字符数量是否在最大或最小之内
	if(num>15 || num<7 || dot!=3)
	{
		printf("error ip format!\n");
		return -1;
	}

	//第一个段在1~255之间
	for(i=0;i<kdot[0];i++){
		dip[i] = *(buf+kdot[0]-i-1);
	}
	if(atoi(dip)>255 || atoi(dip)<1){
		printf("first IP must is 1~255\n");
		return -1;
	}
	//后面的段在0~255之间
	for(i=0;i<3;i++){
		for(j=0;j<3;j++){
			if((kdot[i]) != 0){
				if(*(buf+kdot[i]+j+1) != '.'){
					dn++;
				}		
			}
		}
		if(dn==3){
			for(i=0;i<3;i++){
				dip[0] = *(buf+kdot[i]+1);
				dip[1] = *(buf+kdot[i]+2);
				dip[2] = *(buf+kdot[i]+3);
				if(atoi(dip)>255){
					printf("IP must is 0~255\n");
					return -1;
				}
			}
		}
		dn=0;
	}

	//输入正确,就打印下面
	printf("input right!\n");
}

int main(int argc, const char *argv[])
{
	char ipbuf[20]="";
	printf("input ip:");
	fflush(stdout);
	scanf("%s",ipbuf);
	getchar();
	do_judgeIP(ipbuf);
	return 0;
}

结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值