判断输入的字符串是否为合法IP地址的程序
2015-08-27 11:38
716 查看
今天写一个IP地址冲突检测程序的时候,写完之后用测试用例测试,发现所写程序没有判断所输入的ip地址是否为合法的IP地址,因此自己写了一个判断输入字符串是否为合法IP地址的程序,程序思路为:判断字符串中点的个数,如果点的个数不等于3或者第一个就为’.’,即为非法IP地址,程序结束。格式符合规范后,判断每个数的范围是否在【0——255】范围内。
程序写的有点简单,反正目前能用就行,之后有时间了再进一步优化修改!
转载请注明出处:http://blog.csdn.net/bad_good_man
程序写的有点简单,反正目前能用就行,之后有时间了再进一步优化修改!
转载请注明出处:http://blog.csdn.net/bad_good_man
#include<stdio.h> #include<string.h> #include<sys/socket.h> #include<math.h> #include<stdlib.h> int main(int argc, char *argv[]) { /* int len; //判断输入的IP地址的长度 len = strlen(argv[1]); printf("IP地址的长度为:%d\n",len); //此处想采用函数inet_aton来判断,但是发现如下情况下,inet_aton仍然返回成功。 // = inet_aton("1234568952"); //存储IP地址 */ char ip[20]; strcpy(ip,argv[1]); printf("the ip is: %s\n",ip); int i,j,k = 0; int ip_len = strlen(ip); printf("the length of the ip is : %d\n",ip_len); char ip_inter[4]; //ip中的点数 for(i=0,j=0;i<ip_len;i++) { if(ip[i] == '.') { ip_inter[j] = i;//记录点的位置 j++; k++;//统计字符串中的点数 //continue; } } //ip地址中点的个数,若点的个数少于3个或者第一个为.则为非法IP地址 if((k != 3) || (ip[0] == '.')) { printf("this is illegal ip address!please input the write ip!!\n"); exit(0); } //判断第一个点之前的数是否在0——255范围内 printf("第一个点的位置:%d\n",ip_inter[0]); int num1=ip_inter[0]; int i1; float sum1=0.0; for(i1 = 0; i1 < num1; i1++) { printf("%d\n",(ip[i1]-48)); sum1 += (ip[i1]-48) * pow(10.0,(num1-1-i1)); } printf("ip 的第一个数为:%f\n",sum1); //判断ip第一个数的范围是否在【0-255】 if(0 > sum1 || sum1 >= 256) { printf("illegal ip!please enter again!\n"); exit(0); } //判断第二个数的范围 printf("第二个点的位置:%d\n",ip_inter[1]); int num2=ip_inter[1]; int i2; float sum2=0.0; for(i2 = num1+1; i2 < num2; i2++) { printf("%d\n",(ip[i2]-48)); sum2 += (ip[i2]-48) * pow(10.0,(num2-1-i2)); } printf("ip 的第二个数为:%f\n",sum2); //判断ip第2个数的范围是否在【0-255】 if(0 > sum2 || sum2 >= 256) { printf("illegal ip!please enter again!\n"); exit(0); } //判断第三个数的范围 printf("第三个点的位置:%d\n",ip_inter[2]); int num3=ip_inter[2]; int i3; float sum3=0.0; for(i3 = num2+1; i3 < num3; i3++) { printf("%d\n",(ip[i3]-48)); sum3 += (ip[i3]-48) * pow(10.0,(num3-1-i3)); } printf("ip 的第三个数为:%f\n",sum3); //判断ip第3个数的范围是否在【0-255】 if(0 > sum3 || sum3 >= 256) { printf("illegal ip!please enter again!\n"); exit(0); } //判断第4个数的范围 int num4 = ip_len; int i4; float sum4=0.0; for(i4 = num3+1; i4 < num4; i4++) { printf("%d\n",(ip[i4]-48)); sum4 += (ip[i4]-48) * pow(10.0,(num4-1-i4)); } printf("\nip 的第4个数为:%f\n",sum4); //判断ip第3个数的范围是否在【0-255】 if(0 > sum4 || sum4 >= 256) { printf("illegal ip!please enter again!\n"); exit(0); } return 0; }
相关文章推荐
- Ubuntu 默认壁纸历代记
- Ubuntu Remix Cinnamon 20.04 评测:Ubuntu 与 Cinnamon 的完美融合
- 关于Ubuntu 11.10启动提示waiting for the network configuration的问题
- 在 Ubuntu 桌面中使用文件和文件夹
- ubuntu下chrome无法同步问题解决
- Ubuntu Linux使用体验
- 使用 GNOME 优化工具自定义 Linux 桌面的 10 种方法
- 以Ubuntu 9.04为例 将工作环境迁移到 Linux
- VirtualBox虚拟机XP与宿主机Ubuntu互访共享文件夹
- 从USB安装Ubuntu Server 10.04.3 图文详解
- Ubuntu 15.04 正式版发布下载
- Linux-Ubuntu 10.04安装Cadence-ic610 方法总结图解
- Ubuntu 12.04和Windows 7双系统安装图解
- 开机出现:grub rescue的修复方法
- Ubuntu连接Android真机调试
- 你应该选择 Ubuntu 还是 Fedora?
- 100 个最佳 Ubuntu 应用(中)
- 看看我的Ubuntu Linux截图
- Ubuntu 12.04 LTS服务器版安装过程及使用图解
- Windows 7/8/8.1 硬盘安装 Ubuntu 14.04 实现双系统