c++ - strchr, memchr 定位字符失败

标签 c++ c

我正在尝试解析格式类似于 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/

相关文章:

c - Clang 是否误解了 'const' 指针说明符?

c - 在辅助函数上用字符串填充数组。为什么它会打印乱码?

c - 如何处理 MacOS/X 10.8.x 中弃用的 Carbon 函数?

c++ - 为什么 remove_if( ..., lambda ) 表达式需要赋值运算符?

包含解释为注释的 URL 的 C++ 类对象宏

c++ - 是否可以隐藏(或取消定义)typedef?

c++ - 在Windows窗体c++/cli程序中为已定义的标识符获取未定义的标识符错误

c++ - 为什么调用主函数应该是未定义的行为 (UB)

C语言输入字符串大小写修改代码

c++ - 知道 .lib 是静态的还是导入的