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

    测试结果如下:

    在这里插入图片描述

    展开全文
  • 判断IP地址是否合法 3. 判断MASK是否合法 4. 判断MASK和IP地址组合是否合法 测试: 测试环境:win7 VC++; 测试结果: 1、测试IP是否合法: 输入IP为0xFFFFFFFF即255.255.255.255,结果为不合法; 输入IP为0x...
  • 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,...
  • 题目名称: IP地址合法性及子网判断程序 完成时间: 2020.03.02 - 2020.04.05 专业: 网络工程 班级: 192 学号: 2019083221 成绩: 需求分析: 根据任务要求,该系统可以实现IP地址合法性和子网的判断,相应...
  • 参考:... 私有IP地址范围:A: 10.0.0.0 10.255.255.255 10.0.0.0/8B: 172.16.0.0 172.31.255.255 172.16.0.0/12C: 192.168.0.0 192.168.255.255 192.168.0.0/16 在C语言中的 so...
  • 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地址的内容。 #include <stdio.h> #include <string.h> int main(void) { char str[31],temp[31]; int a,b,c,d; while(gets(str)!=NULL) ...
  • 1、c语言地址合法判断 bool IsIPaddress_standard(const char* pszIPAddr) { if (!pszIPAddr) return false; //若pszIPAddr为空 char IP1[100],cIP[4]; int len = strlen(pszIPAddr); int i = 0,j=len-1...
  • C语言实现IP合法性判断

    千次阅读 2019-08-25 11:44:07
    #include<stdio.h> #include<string.h> int main() { char str[30]; int a,b,c,d,i;... printf("输入IP地址:\n"); while(scanf("%s",str)==1) { if(str[0]=='0' && str[1]!='.') ...
  • 判断IP地址,MAC地址合法性-C语言

    千次阅读 2015-08-14 16:19:25
    int isValidMac(char *value) { int r; //r=0:valid, else not valid char *reg="^[0-9A-F]\\([0-9A-F]\\:[0-9A-F]\\)\\{5\\}[0-9A-F]$"; r=ereg(reg,value); return r; } ...int isValidIp(char *value)
  • 相信大家都见过这样一个情况:在输入框输入ip地址的过程中,如果输入错误,UI就会弹框提示你输入有误。比如当你输入1926、192… 、192.168.6.8.6等等错误的数据,都会提示你输入错误。接下来用C语言判断输入ip的...
  • #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地址判断c语言

    千次阅读 2018-04-27 21:16:26
    IP地址是一个32位的二进制数,通常被分割为4个8位二进制数。IP地址通表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100....
  • ip地址是这样定义的: typedef u_int32_t in_addr_t; struct in_addr { in_addr_t s_addr; }; struct ip_header { #ifdef WORDS_BIGENDIAN u_int8_t ip_version: 4, /* IP协议版本 */ ip_header_...
  • 但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。 Input 输入有多个case,每个case有一行,不超过100个字符。 Output 对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。 ...
  • 代码如下: /***********************...*功能:判断输入一个IP地址字符串是否是合法? *作者:lml 时间:2020年4月15日20:34:40 **********************************************************/ #include <stdio...
  • 1.输入一个IP地址字符串(支持16进制和10进制),判断ip是否合法,例如ip为“192.1.0.1”返回ture,ip为“266.266.266.1”,返回false。 程序思路 1、要把ip地址分隔开,当然是用“.”分割。 2、ip地址有十进制和16...
  • C语言检查ip是否合法

    2019-09-30 23:50:56
    在工作当中我们经常会遇到这种问题:判断一个输入的字符串是否为合法的IP地址,下面是一个测试小程序: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include...
  • 判断IP地址的合法性, 1.不能出现除数字和点字符以外的的其他字符 2.数字必须在0-255之间,要注意边界。 题目分析: 因为一个IP是又四个数字组成,且可能存在符号和其他字符,故不能用整型数组处理,应该用字符...
  • int str_is_mac_addr(char *lst){ //判断字符串是否为 MAC 地址 int flag = 1, count = 0; char *p; p = strtok(lst, ":"); while (p != NULL) { if (strlen(p) != 2) flag = 0; for (int i=0; i<strlen...
  • Problem Description 在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,...但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。 Input 输入有多个case,每个
  • C语言 IP的计算

    2019-12-17 21:58:02
    但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。 Input 输入有多个case,每个case有一行,不超过100个字符。 Output 对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。 ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 118
精华内容 47
关键字:

c语言判断ip地址

c语言 订阅