首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strchr,memchr找不到字符

strchr,memchr找不到字符
EN

Stack Overflow用户
提问于 2013-05-31 23:58:37
回答 3查看 615关注 0票数 1

我正在尝试解析一个类似于1-3,5-7格式的字符串。我需要读1,3和5,7。

我在做什么

代码语言:javascript
复制
char *dup_string;
dup_string = strdup(data);
tok = strtok(dup_string, ",");
while (tok != NULL)
{
    char *rangeTok;
    rangeTok = (char *)memchr(tok, "-", strlen(tok));
    startpage = atoi(tok);
    if(rangeTok != NULL)
    {
         *rangeTok++;
         endpage = atoi(rangeTok);
    }
    else 
         endpage = startpage;

    tok = strtok(NULL,",");
}

这里memchar返回了一个错误的Here,我试过使用strchr,它也返回了batptr。知道为什么它会返回badptr吗?

仅供参考,之前我试过了:

代码语言:javascript
复制
tok = strchr(dupstring, ",");

它在一段时间内工作得很好,并开始返回badptr。我不确定它为什么要这么做。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-01 00:39:37

正如前面已经指出的,您向strchrmemchr传递了错误的参数。第二个参数是保存字符值的整数,而不是const char *

这一行

代码语言:javascript
复制
rangeTok = (char *)memchr(tok, "-", strlen(tok));

应该是

代码语言:javascript
复制
rangeTok = (char *)memchr(tok, '-', strlen(tok));

或者最好是

代码语言:javascript
复制
rangeTok = strchr(tok, '-');

顺便说一句,这是什么badptr?你是说NULL吗?

票数 1
EN

Stack Overflow用户

发布于 2013-06-01 00:03:09

memchr()的原型如下:void * memchr(void * ptr, int value, size_t num);。但是您在memchr(tok, "-", strlen(tok));中传递的是字符串,而不是整数。您使用strtok()的方式也是错误的,应该是这样的:

代码语言:javascript
复制
tok = strtok(dup_string, ",");
while (tok != NULL)
{

   /* Body of Loop */


    tok = strtok(NULL,",");
}

在第一次调用时,strtok()需要一个字符串作为第一个参数,其第一个字符用作扫描令牌的起始位置。在随后的调用中,该函数期望一个空指针,并使用紧接在最后一个令牌结束之后的位置作为新的扫描开始位置。

票数 1
EN

Stack Overflow用户

发布于 2013-06-01 00:08:51

尝试以这种方式使用sscanf()

代码语言:javascript
复制
#include<stdio.h>

#include<string.h>

main()
{
    char *data = "1-3,5,8-9";
    char *ptr = data;
    int e, pos=0, startpage, endpage;
    while((e=sscanf(ptr, "%d-%d%n", &startpage, &endpage, &pos))>=1)
    {
        ptr+=pos;

        if(e==1)
             endpage = startpage;

        printf("start page %d ** end page %d\n",startpage,endpage);

        if (sscanf(ptr, " %*[,]%n", &pos) >= 0)
             ptr+=pos;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16861393

复制
相关文章

相似问题

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