【问题标题】:strtok with empty string delimiter带有空字符串分隔符的 strtok
【发布时间】:2018-01-23 09:27:50
【问题描述】:

我在其中一个库中看到了以下代码。当空字符串作为分隔符传递时,strtok 的行为是什么?我可以看到 buf 包含的任何内容,在 strtok 调用后存储到 token 变量中。

char buf[256] = {0};
char token = NULL;

...
...
while (!feof(filePtr))
{
  os_memset(buf, 0, sizeof(buf));
  if (!fgets(buf, 256, filePtr)) 
  {
    token = strtok(buf, "");
    ...
    ...
  }
}

【问题讨论】:

  • 我看不出那个特定的strtok 电话的意义。这与执行token = buf 相同(如果token 是指向char指针,而不是单个char)。您找到的是实际代码吗?你在哪里找到它?也许这是错误?或者也许作者最初在字符串中有一些分隔符,但在以后的版本中删除了它们?实在是说不出原因,你得问问作者。
  • @Barmar 好的先生,现在我明白了,谢谢,让我清理一下。

标签: c strtok


【解决方案1】:

strtok() 首先查找不在分隔符列表中的第一个字符,以查找标记的开头。由于不是所有字符都在分隔符列表中,因此字符串的第一个字符将是标记的开头。

然后它在分隔符列表中查找下一个字符,以找到标记的结尾。由于没有分隔符,它永远不会找到任何分隔符,所以它会停在字符串的末尾。

因此,空分隔符列表意味着整个字符串将被解析为单个标记。

他为什么会这样写,谁也说不准。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2014-12-23
    相关资源
    最近更新 更多