Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90808
  • 博文数量: 22
  • 博客积分: 486
  • 博客等级: 下士
  • 技术积分: 262
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-07 19:26
文章分类

全部博文(22)

文章存档

2012年(22)

我的朋友

分类: C/C++

2012-03-23 11:43:06


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. int is_valid_ip(const char *ip)
  3. {
  4.     int section = 0; //每一节的十进制值
  5.     int dot = 0; //几个点分隔符
  6.     int last = -1; //每一节中上一个字符
  7.     while(*ip)
  8.     {
  9.         if(*ip == '.')
  10.         {
  11.             dot++;
  12.             if(dot > 3)
  13.             {
  14.                 return 0;
  15.             }
  16.             if(section >= 0 && section <=255)
  17.             {
  18.                 section = 0;
  19.             }else{
  20.                 return 0;
  21.             }
  22.         }else if(*ip >= '0' && *ip <= '9')
  23.         {
  24.             section = section * 10 + *ip - '0';
  25.             if(last == '0')
  26.             {
  27.                 return 0;
  28.             }
  29.         }else{
  30.             return 0;
  31.         }
  32.         last = *ip;
  33.         ip++;
  34.     }

  35.     if(section >= 0 && section <=255)
  36.     {
  37.         if(3 == dot)
  38.         {
  39.         section = 0;
  40.         printf ("IP address success!\n");
  41.         //printf ("%d\n",dot);
  42.         return 0;
  43.       }
  44.     }
  45.     return 1;
  46. }

  47. int main()
  48. {
  49.     is_valid_ip("192.249.23.123");
  50. }

阅读(8242) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

ligangbin1172014-03-25 12:12:38

有两个问题:1.报错时一直返回的是0,而到后面正确打印printf ("IP address success!\n"); 返回的也是0.
2.只判断最后一次记录的是不是为0.那么如果某个ip的其中一段是101。则会认为是非法的ip.