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

我在做什么

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返回badptr,我尝试使用strchr,它也返回batptr。为什么它返回badptr的任何想法。

仅供引用,我之前尝试过:
tok = strchr(dupstring, ",");

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

最佳答案

正如已经指出的那样,您将错误的参数传递给strchrmemchr。第二个参数是一个保存字符值的整数,而不是const char *

这条线

rangeTok = (char *)memchr(tok, "-", strlen(tok));

应该是
rangeTok = (char *)memchr(tok, '-', strlen(tok));

或最好
rangeTok = strchr(tok, '-');

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

关于c++ - strchr,memchr无法找到字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16861393/

10-12 15:05