当前位置: 首页 > news >正文

C语言通用函数 - 判断ip是否合法

经常找类似的函数,但是总是不尽如人意。
自己写个供大家参考吧,省的到处搜,浪费时间

原理很简单就是根据点分十进制的样式进行比对,一个字符一个字符的匹配,存在三个点,且字符为数字,并且值小于等于255,大于等于0.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int is_valid_ip(const char *str) {char tmp[32];memset(tmp, 0, sizeof(tmp));strcpy(tmp, str);if (strlen(tmp) < 7 || strlen(tmp) > 15){return 0;}char *p = tmp, *start = tmp;int a= 0;p = strchr(p, '.');if (p == NULL) return 0;*p = '\0';a = atoi(start);while(*start) {if (!isdigit(*start))return 0;start++;}//printf("a=%d, [p=%s]\n", a, p);if (a < 0 ||a > 255) return 0;p++;start = p;p = strchr(p, '.');if (p == NULL) return 0;*p = '\0';a = atoi(start);while(*start) {if (!isdigit(*start))return 0;start++;}//printf("a=%d, [p=%s]\n", a, p);if (a < 0 ||a > 255) return 0;p++;start = p;p = strchr(p, '.');if (p == NULL) return 0;*p = '\0';a = atoi(start);while(*start) {if (!isdigit(*start))return 0;start++;}//printf("a=%d, [p=%s]\n", a, p);if (a < 0 || a > 255) return 0;p++;start = p;if (strchr(p, '.')) { //192.168.1..1printf("Too many dot\n");return 0;}int len = strlen(p); //192.168.1.if (len == 0 || len > 3) return 0;a = atoi(start);while(*p) {if (!isdigit(*p))return 0;p++;}//printf("a=%d, [p=%s]\n", a, p);if (a < 0 || a > 255) return 0;return 1; // 是合法的IP地址
}int main(int argc, char *argv[]) {char ip[] = "192.168.1.x";printf("%s is%s a valid IP address.\n", argv[1], is_valid_ip(argv[1]) ? "" : " not");return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 简述Glide的源码
  • 自动化脚本到LabVIEW转换
  • Django+Vue花卉商城系统的设计与实现
  • day04-面向对象-常用API时间Arrays
  • Django+Vue音乐推荐系统的设计与实现
  • 如何在C语言中使用pthread库实现多线程编程
  • kafak集群搭建-基于kRaft方式
  • 【MySQL-24】万字全面解析<索引>——【介绍&语法&性能分析&使用规则】
  • USER_CLOCK_ROOT
  • 解构赋值的理解
  • python办公自动化:使用`Python-PPTX`创建和操作表格
  • 数学建模学习(121):Python实现模糊AHP(Fuzzy AHP)——从原理到实践
  • JAVA_12
  • 一文搞懂Window、PhoneWindow、DercorView、WindowManage
  • C#计算模数转换器(ADC)的参数DNL、INL、SNR等
  • hexo+github搭建个人博客
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • hadoop集群管理系统搭建规划说明
  • Javascript编码规范
  • JSDuck 与 AngularJS 融合技巧
  • SegmentFault 2015 Top Rank
  • SpiderData 2019年2月23日 DApp数据排行榜
  • tensorflow学习笔记3——MNIST应用篇
  • Vim Clutch | 面向脚踏板编程……
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 对象管理器(defineProperty)学习笔记
  • 给初学者:JavaScript 中数组操作注意点
  • 规范化安全开发 KOA 手脚架
  • 欢迎参加第二届中国游戏开发者大会
  • 基于axios的vue插件,让http请求更简单
  • 记一次和乔布斯合作最难忘的经历
  • 前端工程化(Gulp、Webpack)-webpack
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 转载:[译] 内容加速黑科技趣谈
  • 关于Android全面屏虚拟导航栏的适配总结
  • 数据库巡检项
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​学习一下,什么是预包装食品?​
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (Note)C++中的继承方式
  • (笔试题)合法字符串
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四) 虚拟摄像头vivi体验
  • (四)图像的%2线性拉伸
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转) Android中ViewStub组件使用
  • (转)ObjectiveC 深浅拷贝学习
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET WPF 抖动动画
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...