Strtok рекурсивная потеря указателя вызова

Мне нужно, чтобы в моей программе дважды вызывался strtok, один внутри другого. У меня проблема в том, что первый strtok не может возобновить цикл после выполнения внутреннего strtok и теряет указатель первого символа.

Чтобы объяснить больше, вот пример:

основной :

 tokens = strtok (stmt, ":");
        while (tokens != NULL) {
            convert_field(tokens);
            tokens = strtok (NULL, ":");
        }

в функции convert_field я делаю

tokens = strtok (sub_stmt, ".->//");
        while (tokens != NULL) {
            convert_field(tokens);
            tokens = strtok (NULL, ".->//");
        }

person Aymanadou    schedule 20.04.2012    source источник


Ответы (1)


strtok не является реентерабельным (что означает, что вы не можете снова вызвать функцию, пока она не завершит свое предыдущее выполнение), вместо этого вы должны использовать strtok_r (который является реентерабельным).

person user703016    schedule 20.04.2012