strtok с пустым разделителем строк

Я видел следующий фрагмент кода в одной из библиотек. Каково поведение strtok, когда в качестве разделителя передается пустая строка? Я могу видеть все содержимое буфера, сохраненное в переменной токена после вызова strtok.

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

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

1 ответ

Решение

strtok() начинается с поиска первого символа, которого нет в списке разделителей, чтобы найти начало токена. Поскольку все символы отсутствуют в списке разделителей, первый символ строки будет началом токена.

Затем он ищет следующий символ в списке разделителей, чтобы найти конец токена. Поскольку разделителей нет, он никогда не найдет ни одного из них, поэтому он останавливается в конце строки.

В результате пустой список разделителей означает, что вся строка будет проанализирована как один токен.

Почему он написал это так, можно только догадываться.

Другие вопросы по тегам