精华内容
下载资源
问答
  • 如何用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

    这里写图片描述
    展开全文
  • c语言判断ip地址是否合法的ip类型

    千次阅读 2015-12-05 15:52:51
     (1)使用字符串分隔,然后判断分割后的字符是否合法  (2) #include #include int a,b,c,d; char s[100]; void main() { strcpy(s,"123.1.2.3"); if (4==sscanf(s,"%d.%d.%d.%d",&a,&b,&c,&d)) {

    方法一:

       完全当做字符串来解释:

       (1)使用字符串分隔,然后判断分割后的字符是否合法

        (2)

    #include <stdio.h>
    #include <string.h>
    int a,b,c,d;
    char s[100];
    void main() {
        strcpy(s,"123.1.2.3");
        if (4==sscanf(s,"%d.%d.%d.%d",&a,&b,&c,&d)) {
            if (0<=a && a<=255
             && 0<=b && b<=255
             && 0<=c && c<=255
             && 0<=d && d<=255) {
                printf("[%s] is valid IPv4\n",s);
            } else {
                printf("[%s] is invalid IPv4\n",s);
            }
        } else {
            printf("[%s] is invalid IPv4\n",s);
        }
    }

    (3)正则表达式,python等脚本语言


    二,直接调用函数inet_pton或者inet_aton,判断返回值

    展开全文
  • ip地址进行判断, 可以用很多方法, 比如正则表达式, 直接解析法。 但是

            对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 = 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吧。 如果大家如果大家有好的方法, 欢迎分享。     

     


     

    展开全文
  • C语言判断IP地址是否合法 IPv4地址是由四个0~255的整型数,中间以’.'隔开的字符串,最大为长度为15。 通过以上特征来鉴别是否是IPv4地址。整个字符串只能是由09的数字和’.‘组成,不能有其它字符。资格整数间嵌入...

    C语言判断IP地址是否合法

    IPv4地址是由四个0~255的整型数,中间以’.'隔开的字符串,最大为长度为15。

    通过以上特征来鉴别是否是IPv4地址。整个字符串只能是由0-9的数字和’.‘组成,不能有其它字符。资格整数间嵌入了三个’.’,每个整数的范围都在0~255,在整数0出现以后,后面只能是’.’,不能是数字了。如192.168.01.1。

    #include <stdio.h>
    #include <string.h>
    
    #define MAX_SIZE_IP_NUM	12
    #define MAX_SIZE_IP_LEN 17
    
    int is_ipv4_addr(char *ip);
    
    int main()
    {
    	char str[MAX_SIZE_IP_NUM][MAX_SIZE_IP_LEN] = {
    		"192.168.0.1",
    		"192.168. 1.1",
    		"256.168.0.1",
    		"19a.168.2.3",
    		"192.168.2.1 ",
    		"192.168.2.",
    		"1921.168.1.1",
    		"192.1 2.3.",
    		"192.1..1.4",
    		"192.1.1.1.",
    		"192.168.01.0",
    		"192.192.192.1921"};
    	for (int i = 0; i < MAX_SIZE_IP_NUM; i++) {
    		printf("#%s#   ", str[i]);
    		if (is_ipv4_addr(str[i]) == 0) {
    			printf("true\r\n");
    		} else {
    			printf("false\r\n");
    		}
    	}
    	return 0;
    }
    
    int is_ipv4_addr(char *ip)
    {
    	if (ip == NULL || ip[0] == '0' || ip[0] == '\0') {
    		return -1;
    	}
    
    	for (int i = 0, count = 0; i < strlen(ip); i++) {
    		if ((ip[i] != '.') && (ip[i] < '0' || ip[i] > '9')) {
    			return -1;
    		}
    		if (ip[i] == '.') {
    			count++;
    			if (count > 3) {
    				return -1;
    			}
    		}
    	}
    
    	int ip_num[4] = {-1, -1, -1, -1};
    	char ip_s[4][4];
    	memset(ip_s, 0, sizeof(char[4]) * 4);
    
    	sscanf(ip, "%[^.].%[^.].%[^.].%[^ ]", ip_s[0], ip_s[1], ip_s[2], ip_s[3]);
    	sscanf(ip_s[0], "%d", &ip_num[0]);
    	sscanf(ip_s[1], "%d", &ip_num[1]);
    	sscanf(ip_s[2], "%d", &ip_num[2]);
    	sscanf(ip_s[3], "%d", &ip_num[3]);
    
    	for (int i = 0; i < 4; i++) {
    		if (strlen(ip_s[i]) == 0 || (ip_s[i][0] == '0' && ip_s[i][1] != '\0') || ip_num[i] < 0 || ip_num[i] > 255) {
    			return -1;
    		}
    	}
    
    	return 0;
    }
    

    测试结果如下:

    在这里插入图片描述

    展开全文
  • C语言判断IP地址是否合法

    千次阅读 2015-07-11 21:56:51
    判断输入的IP地址是否合法 #include unsigned long ip; int judge(int ,int ,int ,int); void main() { char *ipstr[50]; int a,b,c,d; printf("please input a ip\n"); scanf("%s",ipstr); sscanf(ipstr,...
  • C语言判断IP地址是否合法

    千次阅读 2010-10-24 19:12:00
    int is_valid_ip(const char *ip) { int section = 0; //每一节的十进制值 int dot = 0; //几个点分隔符 int last = -1; //每一节中上一个字符 while(*ip){ if(*ip == '.'){ dot++; if(dot > 3){
  • C语言检查ip是否合法

    2019-09-30 23:50:56
    在工作当中我们经常会遇到这种问题:判断一个输入的字符串是否合法IP地址,下面是一个测试小程序: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include...
  • 下面内容是关于C语言判断给定的字符串是否合法ip地址的内容。 #include <stdio.h> #include <string.h> int main(void) { char str[31],temp[31]; int a,b,c,d; while(gets(str)!=NULL) ...
  • 接下来用C语言判断输入ip的过程中是不是正确的输入,主要是判断以下几种情况是不合法的: 1、同时出现两个小数点或者以小数点开头 2、输入的小数点大于3 3、小数点之间的数字不在0~255之间 //把str字符串中,第一...
  • 1.输入一个IP地址字符串(支持16进制和10进制),判断ip是否合法,例如ip为“192.1.0.1”返回ture,ip为“266.266.266.1”,返回false。 程序思路 1、要把ip地址分隔开,当然是用“.”分割。 2、ip地址有十进制和16...
  • #include #include // www.outofmemory.cn int main(void) { char str[31],temp[31]; int a,b,c,d; while(gets(str)!=NULL) { if(sscanf(str, "%d.%d.%d.%d ",&a,&b,&c,
  • 代码如下: /***********************...*功能:判断输入一个IP地址字符串是否合法? *作者:lml 时间:2020年4月15日20:34:40 **********************************************************/ #include <stdio...
  • 最近在项目中突然遇到了主题的这个问题,当时匆匆一想,好像觉得还挺简单的吧?结果代码一写,发现还真的听过case需要考虑的呀! 改天抽空把测试代码共享出来。。。未完待续。。。 ...
  • 工作中经常碰到IP及子网掩码是否合法判断,虽然可以google出答案,还是整理下记录下来,以后用时方便。   一 原理 1. IP合法 关于IP地址的合法性验证很简单,方法也很多,比如字符串分解、正则...
  • 分析:首先我们要知道IP地址(IPV4)的条件: (除去特殊的主机和广播地址) ...4、特别说明一下isdigit函数,主要用于检查其参数是否为十进制数字字符,C语言中要加上头文件<ctype.h> 代码如...
  • 在实际开发中,作一些字符串的匹配时,使用正则表达式来过滤匹配,代码更加简洁、匹配更加...  要求用户输入一串类似 IP地址 的字符串,该程序通过调用C库提供的正则表达式接口来实现判断用户输入的 IP 是否合法
  • IP地址

    2020-05-20 17:39:14
    输入一个ip地址串,判断是否合法。 输入描述: 每行有一个IP地址IP地址的形式为a.b.c.d,其中a、b、c、d都是整数。 输出描述: 可能有多组测试数据,对于每组数据,如果IP地址合法则输出"Yes!”,否则输出"No!”。 ...
  • C语言经典编程之字符串:按特定顺序输出压缩,IP地址判断是否合法,字符串压缩、解压、排序,查找相同的字串,单词升序排列,统计单词个数,Objective-C和C++命名之争,字符串删除、插入、替换、抽取、交换、拼接、...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    是否合法? 1.36 我总算弄清楚函数指针的声明方法了,但怎样才能初始化呢? 1.37 能够初始化联合吗? 第2章 结构、联合和枚举 结构声明 2.1 structx1{ };和typedefstruct{ }x2;有什么不同? 2.2 这样的...
  • 难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...
  • 是否合法? 1.36 我总算弄清楚函数指针的声明方法了,但怎样才能初始化呢? 1.37 能够初始化联合吗? 第2章 结构、联合和枚举 结构声明 2.1 struct x1{ };和typedef struct{ }x2; 有什么不同? 2.2 这样的代码为...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    是否合法? 20 1.36 我总算弄清楚函数指针的声明方法了,但怎样才能初始化呢? 20 1.37 能够初始化联合吗? 20 第2章 结构、联合和枚举 21 结构声明 21 2.1 struct x1{ };和typedef struct{ }x2; 有...
  • 是否合法? 20 1.36 我总算弄清楚函数指针的声明方法了,但怎样才能初始化呢? 20 1.37 能够初始化联合吗? 20 第2章 结构、联合和枚举 21 结构声明 21 2.1 struct x1{ };和typedef struct{ }x2; 有...

空空如也

空空如也

1 2 3
收藏数 44
精华内容 17
关键字:

c语言判断ip地址是否合法

c语言 订阅