Основное отличие функций strtok и strtok_r заключается в их особенностях обработки строки:
- strtok разделяет строку на последовательность токенов, используя статический буфер. 14 При обработке строки её небезопасно использовать в программах со множеством процессов, работающих с одной областью памяти. 1
- strtok_r является реентрантной версией strtok и вместо статического буфера использует указатель типа char*, предоставленный пользователем. 1 Этот указатель, передаваемый в параметре ptrptr, должен быть одним и тем же при обработке одной и той же строки. 1
Таким образом, strtok_r позволяет безопасно использовать функцию в потокобезопасных условиях, так как её можно вызывать из нескольких потоков одновременно или во вложенных циклах. 2