Funzione strtok
La funzione strtok della libreria string.h serve per spezzare una stringa s in base a dei caratteri di separazione.
char *strtok(char *s, char *sep);
Quando viene chiamata con s!=NULL, la funzione controlla gli elementi della stringa e posiziona un puntatore (p) nel primo carattere che non sia un separatore. Poi prosegue fino al successivo separatore dove viene posizionato il carattere '\0'. A questo punto restituisce il puntatore p.
Successive chiamate con s==NULL, eseguono le stesse operazioni partendo però dalla posizione in cui si era fermato il puntatore alla chiamata precedente e restituendo un puntatore alla parola successiva.
char s[]="1AB213CD0FR931";
char del[]="0123456789";
char *p;
s 1 A B 2 1 3 C D 9 F R 9 3 1
p=strtok(s,del); // p="AB"
s 1 A B \0 1 3 C D 9 F R 9 3 1
p
p=strtok(NULL,del); // p="CD"
s 1 A B \0 1 3 C D \0 F R 9 3 1
p
p=strtok(NULL,del); // p="FR"
s 1 A B \0 1 3 C D \0 F R \0 3 1
p
p=strtok(NULL,del); // p=NULL
s 1 A B \0 1 3 C D \0 F R \0 3 1
Il risultato è quello di avere ad ogni passo la variabile p che punta ad una sottostringa della stringa iniziale.
Tutte queste operazioni possono essere effettuate con un ciclo for:
for(p=strtok(s,del); p!=NULL; p=strtok(NULL,del)) ...
Implementazioni alternative della funzione strtok possono sostituire tutti i caratteri di separazione con tanti '\0':
s \0 A B \0 \0 \0 C D \0 F R \0 \0 \0
oppure sostituire un blocco di caratteri di separazione con un unico '\0' eliminando i separatori iniziali e finali:
s A B \0 C D \0 F R \0
Indipendentemente dall'implementazione interna, il comportamento esterno della funzione è sempre lo stesso e cioè quello di far si che p punti successivamente a delle stringhe che rappresentano le parole di s dove per parola si intende una sottostringa separata dalle altre dai separatori.