Πρέπει να δω ολόκληρο τον κώδικα για να βγάλω άκρη.
Η strtok() "σπάει" το 1ο όρισμά της σε μικρότερα κομμάτια που διαχωρίζονται από οποιονδήποτε χαρακτήρα περιέχεται μέσα στο 2ο όρισμά της. Επιστρέφει το 1ο από αυτά τα κομμάτια, οπότε για να τα μαζέψεις όλα πρέπει να την βάλεις μέσα σε ένα loop, όπου την ξανακαλείς αλλά με NULL πλέον το 1ο όρισμά της.
Ιδανικά θα πρέπει να χρησιμοποιήσεις κι έναν πίνακα από strings ώστε να "περισυλλέγεις" σε διαδοχικές θέσεις του πίνακα τα strings που σου επιστρέφει κάθε φορά η strok() καθώς "κομματιάζει" το αρχικό string σε κάθε επανάληψη του loop.
Καλό θα ήταν να το παλέψεις μόνος σου για να βρεις τι ακριβώς παίζει, αν όμως βαρεθείς ή οτιδήποτε άλλο, μπορείς να χρησιμοποιήσεις μια συνάρτηση που έχω φτιάξει ειδικά για αυτόν τον σκοπό, και την ονομάζω: s_tokenize().
- Κώδικας: Επιλογή όλων
// ***********************************************************
// break a string up to maxtokens tokens and store them in *tokens[]
// (uses the chars in the delimeter string to separate tokens)
// returns the number of tokens, or 0 on failure
// ***********************************************************
int s_tokenize(char *s, char *tokens[], int maxtokens, char *delimiters)
{
register int i=0;
tokens[0] = strtok(s, delimiters);
if (tokens[0] == NULL)
return 0;
for (i=1; i < maxtokens && (tokens[i]=strtok(NULL, delimiters)) != NULL; i++);
return i;
}
Δέχεται ως ορίσματα:
α) το αρχικό string ( s )
β) τον πίνακα από strings για αποθήκευση των "κομματιών" του s ( *tokens[] )
γ) το μέγιστο πλήθος "κομματιών" στο οποίο θες να "κομματιαστεί" το αρχικό s ( maxtokens )
δ) το string που περιέχει τους διαχωριστικούς χαρακτήρες ( delimiters )
Η συνάρτηση σου επιστρέφει το πλήθος των κομματιών που προέκυψαν από το "κομμάτιασμα".
Είναι επίσης σημαντικό να σημειώσεις πως είτε με την strtok() είτε με s_tokenize() το αρχικό σου string "κομματιάζεται", οπότε αν για οποιονδήποτε λόγο το χρειάζεσαι ολόκληρο μετά την κλήση αυτών των συναρτήσεων, θα πρέπει πρώτα να φτιάξεις ένα αντίγραφό του (π.χ. με strncpy() ) και να περάσεις σε αυτές τις συναρτήσεις το αντίγραφο.