首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >字符串未正确标记。

字符串未正确标记。
EN

Stack Overflow用户
提问于 2015-01-30 11:13:18
回答 3查看 81关注 0票数 0

我在ip地址上应用一个公式。但它有时会给我一些随机输出,这是很奇怪的。有时它不能正确地标记,有时它会给出0值。在1000个样本中,误差恢复率几乎为2-5。

调用函数=公式(IPADDRESS);我以每秒数百个不同的IP调用该函数。

代码语言:javascript
运行
复制
 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;
    }

OUTPUTFILE:(我只提供了错误的输出)

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-01-30 11:37:13

而不是在strtok()上循环,

代码语言:javascript
运行
复制
int a=0, b=0, c=0, d=0 ;
int value ;
sscanf( ip, "%d.%d.%d.%d", &a, &b, &c, &d );
value = ( ( a * 255 + b ) * 255 + c ) * 255 + d ;
finalv = value % 9999

我想应该给你同样的答案。(尽管正如注释中所指出的,255s可能意味着是256)。

票数 0
EN

Stack Overflow用户

发布于 2015-01-30 11:20:41

你要重新声明token

代码语言:javascript
运行
复制
        char *token = NULL;  // <-- here
        unsigned long value;
        int finalv;
        char ipaddress[16];
        char token[]=".";    // <-- and here

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

代码语言:javascript
运行
复制
token = strtok( NULL,token);

...where,第一个令牌应该是指针,第二个是数组。

我有点惊讶,甚至编译,请注意,但您的编译器至少没有警告您这一点吗?

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

代码语言:javascript
运行
复制
fp = fopen(LOGFILE, token);

tokenNULL时执行,这将导致未定义的行为。你的意思是

代码语言:javascript
运行
复制
fp = fopen(LOGFILE, "w");
票数 2
EN

Stack Overflow用户

发布于 2015-01-30 11:20:43

变化

token = strtok( NULL,token);

token = strtok(NULL,".");

PS:因为您每秒调用此函数数百次,所以最好打开并关闭该函数之外的文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28234669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档