gpt4 book ai didi

c - 字符串未正确标记

转载 作者:太空宇宙 更新时间:2023-11-04 08:31:15 25 4
gpt4 key购买 nike

我正在对 ip 地址应用一个公式。但它有时会给我一些随机输出,这很奇怪。有时它没有正确标记化,有时它给出 0 值。在 1000 个样本中,错误再生率几乎为 2-5。
调用函数 = 公式(IPADDRESS);我每秒调用数百个不同的 IP。

 int formula ( char ip[]){

char *token = NULL;
unsigned long value;
int finalv;
char ipaddress[16];
char delims[]=".";
int octet=3;
value = 0;
FILE *fp;
fp = fopen(LOGFILE, "a");
strcpy(ipaddress,ip);
fprintf(fp, "%s\n",ipaddress);
token = strtok( ipaddress,delims);

while( token != NULL ) {
fprintf(fp,"%d",(atoi(token));
if ( atoi(token) != 0 ){
if(octet ==3)
value = value + (255 * 255 * 255 * (atoi(token)));
else if(octet ==2)
value = value + (255 * 255 * (atoi(token)));
else if(octet ==1)
value = value + (255 * (atoi(token)));
else if(octet ==0)
value = value + (atoi(token));
}
octet--;
token = strtok( NULL,delims);
}

finalv = value % 9999;

fprintf(fp, " -- %d \n",(int)finalv);
if(fp)
fclose(fp);
return (int)v;
}

输出文件:(我只给出了错误的输出)

172.17.82.255
172 0 1 -- 1983
--
172.254.254.254
172 0 0 0 -- 1728
--
172.255.255.225
172 0 -- 1728
--
172.255.255.255
172 21 0 1 -- 7390
--
172.255.84.255
172 0 8 -- 3768

最佳答案

您正在重新声明 token :

        char *token = NULL;  // <-- here
unsigned long value;
int finalv;
char ipaddress[16];
char token[]="."; // <-- and here

然后,在代码的后面,您对应该在哪个上下文中使用哪个 token 感到有些困惑。这在这里尤为明显:

token = strtok( NULL,token);

...第一个标记可能是指针,第二个标记是数组。

请注意,我什至对它进行了编译感到有点惊讶,但是你的编译器至少没有警告过你吗?

编辑:在“更新”的代码中,

fp = fopen(LOGFILE, token);

tokenNULL 时执行,这会导致未定义的行为。你是说

fp = fopen(LOGFILE, "w");

?

关于c - 字符串未正确标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234669/

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