免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4347 | 回复: 1
打印 上一主题 下一主题

判断用户输入ip地址是否合法的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-11 11:12 |只看该作者 |倒序浏览
程序如下,可以编译执行:
问题是判断输入超过255的地方有错,判断是否数字就可以,
正确执行:
a:192.168.1.1
true

a:266.266.266.266
flause

a:cc.cc.cc.cc
flause
现在执行情况:
a:192.168.1.1
true

a:266.266.266.266
true

a:cc.cc.cc.cc
flause
\帮忙看一下啦
-------------------------------------
#include <stdio.h>;
#include <string.h>;
#include <math.h>;
int addrformat(char *address);
int main()
{
char a[20];
char ac[100];
printf("please enter a:";
        fgets(ac,20,stdin);
        memcpy(a,ac,(strlen(ac)-1));
        a[strlen(ac)-1] = '\0';
        printf("%s\n",a);
if(addrformat(a) == -1)
        printf("flause\n";
        else
        printf("true\n";
}
                                                                                                
int addrformat(char *address) {
        char address_buf[20];
        int i,j;
        for(i=0,j=0;1;i++) {
                if(address != '.' && address != '\0') {
                address_buf[j] = address;
                if(isdigit(address_buf[j]) == 0)
                return -1;
                j++;
                }
                else {
                address_buf[j] = '\0';
                printf("<debug>; address_buf = %s\n",address_buf);//可能这部分里有错
                if(atoi(address_buf) >; 255 && atoi(address_buf) < 0)
                return(-1);
                        else {
                        return 1;
                        j = 0;
                        }
                }
                if(address == '\0');
                break;
                }
}

论坛徽章:
0
2 [报告]
发表于 2004-06-11 15:32 |只看该作者

判断用户输入ip地址是否合法的问题?

一个是
if(address == '\0')后面多了个";",
导致循环执行一次就break跳出

另一个是
if(atoi(address_buf) >; 255 && atoi(address_buf) < 0)
不可能既>;255又<0,
把&&改为||,
或者干脆将"&& atoi(address_buf) < 0"去掉,
安这个代码逻辑,<0是不可能发生的。

再一个是这里:
return 1;
j = 0;
才刚判断了第一个数后怎么就能认为ip合法,return 1了呢?
将return 1去掉,
在函数addrformat的最末尾加上return 1;
另外在循环体内,还要判断ip中的点号"."是否为3个,两个ip
之间是否有数字,否则还是要return -1;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP