gpt4 book ai didi

c++ - 文件读取麻烦?

转载 作者:太空宇宙 更新时间:2023-11-03 10:35:05 24 4
gpt4 key购买 nike

typedef long int INT;
typedef unsigned char byte;

#define MAX_CITIES (INT)2.7e6
#define MAX_LEN (int)1e6

typedef struct
{
unsigned long start;
unsigned long end;
char *region;
char *city;
char *type;
} ipdb;

ipdb db;
char s[MAX_LEN + 1];


typedef struct
{
unsigned long start;
unsigned long end;
char *region;
char *city;
char *type;
} ipdb;

ipdb db;
void search( unsigned long ip )
{
FILE *F;
char * pch;
long i = 0;
F = fopen("cidr_ru_slave_index.db", "rt");
while (fgets(s, MAX_LEN, F))
{
trim_end(s);
pch = strtok (s, "\t");
i = 0;
while (pch != NULL)
{
switch(i)
{
case 0:
db.start = atoi(pch);
break;

case 1:
db.end = atoi(pch);
break;

case 4:
db.city = pch;
break;

case 5:
db.region = pch;
break;

case 8:
db.type = pch;
break;
}
pch = strtok (NULL, "\t");
i++;
}

if(ip >= db.start && ip <= db.end)
{
printf("Match\n");
}
}
}

cidr_ru_slave_index.db 是这样的:

37486592    37494783    2.60.0.0 - 2.60.31.255  RU  Омск    Омская область  Сибирский   ASSIGNED PA
37494784 37502975 2.60.32.0 - 2.60.63.255 RU Омск Омская область Сибирский ASSIGNED PA
37502976 37511167 2.60.64.0 - 2.60.95.255 RU Омск Омская область Сибирский ASSIGNED PA
37511168 37519359 2.60.96.0 - 2.60.127.255 RU Омск Омская область Сибирский ASSIGNED PA
37519360 37527551 2.60.128.0 - 2.60.159.255 RU Омск Омская область Сибирский ASSIGNED PA
...
3653754624 3653754879 217.199.223.0 - 217.199.223.255 RU Москва Москва Центральный ASSIGNED PA
3653758976 3653760255 217.199.240.0 - 217.199.244.255 RU Екатеринбург Свердловская область Уральский ASSIGNED PA
3653759488 3653759503 217.199.242.0 - 217.199.242.15 RU Екатеринбург Свердловская область Уральский ASSIGNED PA
3653759520 3653759551 217.199.242.32 - 217.199.242.63 RU Екатеринбург Свердловская область Уральский ASSIGNED PA
3653759520 3653759535 217.199.242.32 - 217.199.242.47 RU Екатеринбург Свердловская область Уральский ASSIGNED PA
3653762560 3653762815 217.199.254.0 - 217.199.254.255 RU Екатеринбург Свердловская область Уральский ASSIGNED PA

文件大小为14718KB,读取正常(在

之后添加printf("%u\n", db.start)
}
pch = strtok (NULL, "\t");
i++;
}

输出所有文件)。但是扫描ip地址有问题(if(ip >= db.start && ip <= db.end)),文件的前半部分是可以的,但是前半部分之后就没有任何结果,为什么?

PS 操作系统 - gnu/linuxPSS 对不起我的英语 :D

最佳答案

2^31 和更高的值超出了 atoi 可以处理的范围,它将为它们返回 INT_MAX。您可以改用 strtoul

关于c++ - 文件读取麻烦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5275133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com