博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何用C语言判断ip地址是否合法? (用inet_addr有问题)
阅读量:4141 次
发布时间:2019-05-25

本文共 1156 字,大约阅读时间需要 3 分钟。

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

 

#include 
#include
#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 = 0; for(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吧。 如果大家如果大家有好的方法, 欢迎分享。     

 

 

转载地址:http://klrvi.baihongyu.com/

你可能感兴趣的文章
SVN-无法查看log,提示Want to go offline,时间显示1970问题,error主要是 url中 有一层的中文进行了2次encode
查看>>
NGINX
查看>>
Qt文件夹选择对话框
查看>>
1062 Talent and Virtue (25 分)
查看>>
1061 Dating (20 分)
查看>>
1060 Are They Equal (25 分)
查看>>
83. Remove Duplicates from Sorted List(easy)
查看>>
88. Merge Sorted Array(easy)
查看>>
leetcode刷题191 位1的个数 Number of 1 Bits(简单) Python Java
查看>>
leetcode刷题198 打家劫舍 House Robber(简单) Python Java
查看>>
NG深度学习第一门课作业2 通过一个隐藏层的神经网络来做平面数据的分类
查看>>
leetcode刷题234 回文链表 Palindrome Linked List(简单) Python Java
查看>>
NG深度学习第二门课作业1-1 深度学习的实践
查看>>
Ubuntu下安装Qt
查看>>
Qt札记
查看>>
我的vimrc和gvimrc配置
查看>>
hdu 4280
查看>>
禁止使用类的copy构造函数和赋值操作符
查看>>
C++学习路线
查看>>
私有构造函数
查看>>