Функция diff3 у меня вообще не работает. По крайней мере стабильно меняет значения которые я ей передаю да еще и возвращает NAN вместо значения.
Беглый осмотр показал что внутри нее происходит перезаписывание памяти внутри функции strtok_r. Эта функция записывает значения в указатель переданный третьим параметром, у вас же он даже не инициализирован. Подозреваю что память каким-то чудесным образом ( а других не бывает ) попадает в вашу же переменную str1 или str2. Дальше код не разбирал, но подозреваю что там еще могут быть проблемы с записью в переменные через указатели.
Разберитесь с этой функцией отдельно, отладьте ее вначале, независимо от остального кода.