带有空字符串定界符的 strtok

strtok with empty string delimiter

我在其中一个库中看到了以下代码。当空字符串作为定界符传递时,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() 首先查找不在定界符列表中的第一个字符,以查找标记的开头。由于所有字符都不在定界符列表中,因此字符串的第一个字符将是标记的开头。

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

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

他为什么这样写,谁也猜不到。