首页 > 解决方案 > 将正确的参数传递给 strtok

问题描述

我有这个字符串,我试图用它来分隔strtok()

“+ 2 3\\nln 9\\ln 10”

然后我\\n作为分隔符传递

    token = strtok(argv, "\\n");

    while (token)
    {
            args[index] = token;
            token = strtok(NULL, "\\n");
            index++;
    }

args表中的第一个元素是+ 2 3,这很棒,但是,第二个元素是l。有谁明白为什么?如果是这样,我怎样才能把我ln 9的放在我的args桌子上?

标签: cstringstrtok

解决方案


来自strtok() manpage

delim参数指定一组字节,用于分隔已解析字符串中的标记。调用者可以在解析相同字符串的连续调用中在 delim 中指定不同的字符串。

因此,在您的代码中,"\\n"不是完整的字符串分隔符。您只是说strtok分隔符是 '\'因为双退格转义) 'n'.

您的字符串的标记"+ 2 3\\nln 9\\ln 10"将是:

  1. "+ 2 3"
  2. \和之间的空字符串\(strtok 不显示它)
  3. \和之间为空n(strtok 不显示)
  4. "l"
  5. " 9"
  6. \和之间的空字符串\(strtok 不显示它)
  7. "l"
  8. " 10"

为了执行你正在尝试做的事情,strtok并不是最好的选择。我可能会编写自己的解析函数

  1. 使用查找"\\n"原始字符串中的出现strstr()
  2. 将前一个字符串复制到某个输出字符串或 null 终止它

推荐阅读