标题:写了个ipv4地址字符串转换为4个整型数的函数, 大佬们帮我看一下有没有啥问题 ...
只看楼主
浮世的烧酒丶
Rank: 2
等 级:论坛游民
帖 子:19
专家分:21
注 册:2016-10-20
结帖率:83.33%
已结贴  问题点数:20 回复次数:1 
写了个ipv4地址字符串转换为4个整型数的函数, 大佬们帮我看一下有没有啥问题, 跪谢
正确条件是:

仅包含数字, 空格, 点,
允许数字和点之间的空格,
点与点之间为空或为空格, 则默认为0, 如 '...' 视为'0.0.0.0',
点数量为3,
数值不大于255.

其他情况均为非法地址.

代码如下:
程序代码:
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int isIpv4Correct(const char*, int*);
int main(int argc, char const *argv[])
{
    char ipv4str[50] = {};
    int ipv4int[4] = {};

    strcpy(ipv4str, "...");
    puts(ipv4str);
    if (isIpv4Correct(ipv4str, ipv4int)) {
        puts("Correct!");
        for (int i = 0; i < 4; i++) {
            printf("%d ", ipv4int[i]);
        }
    } else {
        puts("Error!");
    }
    return 0;
}

int isIpv4Correct(const char *ipv4str, int *ipv4int) {
    int i = 0, ip = 0;
    int res = 0;
    int dotCount = 0;
    int inNum = 0;
    char cur = ipv4str[i];
    while (cur) {
        if (!isdigit(cur) && cur != ' ' && cur != '.') {
            return 0;
        } else if (isdigit(cur)) {
            inNum = 1;
            res = res*10 + cur-'0';
            if (res > 255) return 0;
        } else if (cur == ' ') {
            if (inNum) {
                return 0;
            } else {
                while (cur == ' ') {
                    cur = ipv4str[++i];
                }
                continue;
            }
        } else {
            ++dotCount;
            inNum = 0;
            ipv4int[ip++] = res;
            res = 0;
        }
        cur = ipv4str[++i];
    }
    if (dotCount != 3) return 0;
    ipv4int[ip] = res;
    return 1;
}

搜索更多相关主题的帖子: 地址 int char return res 
2018-12-14 23:14
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
对不对,难道自己不会测试?
"..2 ." 你的程序认为错误
"..........." 数组溢出
2018-12-17 14:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492024-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.185473 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved