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()
начинается с поиска первого символа, которого нет в списке разделителей, чтобы найти начало токена. Поскольку все символы отсутствуют в списке разделителей, первый символ строки будет началом токена.
Затем он ищет следующий символ в списке разделителей, чтобы найти конец токена. Поскольку разделителей нет, он никогда не найдет ни одного из них, поэтому он останавливается в конце строки.
В результате пустой список разделителей означает, что вся строка будет проанализирована как один токен.
Почему он написал это так, можно только догадываться.