c - What is wrong with the function strtok()? -
so, how works? i've following block of code;
for (i = 0; < n; ++i){ array[i] = malloc(m * sizeof(char)); fgets(buffer, m-1, fp); array[i] = strtok(buffer, "\n"); }
if execute printf("%s", array[i]);
inside for
strtok()
works expected, if
for (i = 0; < n; ++i) printf("%s", array[i]);
outside previous for
, obtain loop of n
array[0]
.
the problem strtok
token returns becomes invalid make next call of strtok
. either copy separate string, or use right away, , discard, must use before calling strtok
again.
for (i = 0; < n; ++i){ array[i] = malloc(m * sizeof(char)); fgets(buffer, m-1, fp); char *tok = strtok(buffer, "\n"); array[i] = malloc(strlen(tok)+1); strcpy(array[i], tok); }
of course need call free
on elements of array[]
after done them.
note strtok
not re-entrant, severely limits use. better choice strtok_r
, re-entrant version of same function.
Comments
Post a Comment