如何用C语言判断ip地址是否合法 用inet addr有问题

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

        对ip地址进行判断, 可以用很多方法, 比如正则表达式和直接解析法。 但是, 并不是所有的朋友都会正则表达式, 直接解析法则繁琐易错。 下面, 我们换一个思路, 看看如何判断ip地址的合法性(其实这个程序有问题):

#include <stdio.h>#include <winsock2.h>#pragma comment(lib, "ws2_32.lib")int isValidIP(char *ip)if(INADDR_NONE == inet_addr(ip)) {  return -1; } return 1;}int main()char ips[][100] =  {  "123.456.789.1",  "116.1.1.29",  "119.x.1.11",  "172.18.18.29",  "-1.1.1.1",  "0.0.0.0",  "255.255.255.255",  "10.85.168.40",  "256.1.1.1",  "127.0.0.1",   "1.1. 1.1",  "190.190.190.190",  "1.1.1",           // 这个被误判为合法的了  "119.1.1.1",  ""                 // 这个被误判为合法的了 };  int size = sizeof(ips) / sizeof(ips[0]); int i = 0for(i = 0; i < size; i++) {  if(-1 == isValidIP(ips[i]))  {   printf("no\n");  }  else  {   printf("yes\n");  } } return 0;}

       结果:

123.456.789.1--->no
116.1.1.29--->yes
119.x.1.11--->no
172.18.18.29--->yes
-1.1.1.1--->no
0.0.0.0--->yes
255.255.255.255--->no
10.85.168.40--->yes
256.1.1.1--->no
127.0.0.1--->yes
1.1. 1.1--->no
190.190.190.190--->yes
1.1.1--->yes
119.1.1.1--->yes
--->yes

     可以看到, 上述程序是有问题的,那怎么办呢? 我们先判断一下字符串中的点的数目吗? 即便如此, 我们怎么知道不存在其他问题呢? 我以前以为inet_addr是判断ip是否合法的好方法, 没想到存在问题。 



     所以, 还是老实一点, 用sscanf吧。 如果大家如果大家有好的方法, 欢迎分享。     



           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页