Ultima modifica:
strtok_r potrebbe essere un modo. Io ho implementato una piccola alternativa perché non mi piace l'idea di alterare anche la stringa originale (così funziona anche se su memoria readonly), probabilmente ci sono modi migliori a partire dal fatto che la signature della funzione non mi convince molto, tende a memory leak, non dà la dimensione, non accetta altri delimiter da parametro...
C:
char** get_tokens(const char* line)
{
int i, j, k, len, nTokens = 0;
len = strlen(line);
i = len;
while (i--)
if (line[i] == ' ')
nTokens++;
char* buffer = (char*)malloc(len + 1);
char** ret = (char**)malloc((nTokens + 2) * sizeof(char*));
if (buffer == 0 || ret == 0)
return 0;
for (i = 0, j = 0, k = 0; i <= len; i++)
{
if (line[i] == ' ')
{
buffer[i] = 0;
ret[j++] = &buffer[k];
k = i + 1;
}
else
buffer[i] = line[i];
}
ret[j++] = &buffer[k];
ret[j] = 0;
return ret;
}
int main()
{
char **tmp, **arr = get_tokens("Lorem ipsum dolor sit amet.");
tmp = arr;
while (*tmp)
{
printf("%s ", *tmp);
tmp++;
}
free(*arr);
free(arr);
}