Lata написав:Повертає вказівник на Null.
Ні
Отже ще раз, функція strtok виконує пошук токенів (лексем) у деякому рядку string. Послідовність викликів цієї функції розбивають рядок на лексеми, які являють собою послідовності символів, розділених символами роздільниками, ці роздільники ви задаєте другим параметром (у вашому випадку це пробіл).
На перший виклик, функція приймає рядок в якості аргументу, який використовується в якості початкової точки для пошуку лексем. У наступні виклики, функція очікує нульовий вказівник (він же NULL) і використовує позицію відразу після закінчення останньої лексеми як нове місцезнаходження для сканування.
В якості результату своєї роботи strtok повертає:
Вказівник на останню знайдену лексему в рядку або повертає нульовий вказівник (він же NULL), якщо немає знайдених лексем.
Таким чином, при першому виклику strtok, якщо все добре ви отримуєте токен, який вказуватиме на перше слово вашого тексту. Проте лише першого слова недостатньо, потрібно отримати і всі інші, аж поки не закінчиться ваш текст, вірно? Саме тому використовують strtok передаючи першим аргументом NULL, адже тоді ф-я продовжить своє виконання з того ж місця де вона завершила і поверне наступне слово і т.д. Тобто це можна використовувати в циклі, як ітератор.
#include <stdio.h>
#include <string.h>
int main() {
char text[] = "pryvitaty z novym rokom i pobazhaty zdaty vsi roboty i otrymaty vysiki baly";
char* token = strtok(text, " ");
printf("%s\n", token); // виведе "pryvitaty"
token = strtok(NULL, " "); // передали NULL
printf("%s\n", token); // виведе "z"
}
Роботу функції strtok можна також уявити, що вона ніби ділить суцільний масив char'ів на масив вказівників на char'и
char text[] = "pryvitaty z novym rokom i pobazhaty zdaty vsi roboty i otrymaty vysiki baly";
// перетворює в:
char* tokens[] = {"pryvitaty", "z", "novym", "rokom", /* і т.д. */};
// тоді їх можна вивести, як:
printf("%s\n", tokens[0]); // виведе "pryvitaty"
printf("%s\n", tokens[1]); // виведе "z"
printf("%s\n", tokens[2]); // виведе "novym"
// ...
І от strtok повертає одразу tokens[0], tokens[1], tokens[2], etc