Да, strtok()
, действительно, использует некоторую статическую память для сохранения своего контекста между вызовами. Вместо этого используйте повторно входящую версию strtok()
, strtok_r()
или strtok_s()
, если вы используете VS (идентично strtok_r()
).
У него есть дополнительный контекстный аргумент, и вы можете использовать разные контексты в разных циклах.
char *tok, *saved;
for (tok = strtok_r(str, "%", &saved); tok; tok = strtok_r(NULL, "%", &saved))
{
/* Do something with "tok" */
}