Когда вы используете strtok (), вы обычно используете код, подобный следующему:
tok = strtok(line, " ");
while (NULL != tok)
{
tok = strtok(NULL, " ");
}
Значение NULL в вызове в цикле говорит strtok, что следует продолжить после ранее найденного токена, пока он не найдет нулевой завершающий символв значении, которое вы передали (строка) или до тех пор, пока не останется больше токенов.Текущий указатель сохраняется в библиотеке времени выполнения, и, как только strtok () возвращает NULL, чтобы указать, что больше нет токенов, больше вызовов strtok () с использованием NULL в качестве первого параметра (для продолжения) приведут к NULL.Вам нужно вызвать его с другим значением (например, другим вызовом strtok (line, "")), чтобы заставить его начать снова.
Что это означает, что вы можете использовать strtok для двух разных строк одновременновам нужно вручную обновлять позицию строки и передавать измененное значение при каждом вызове.
tok = strtok(line, " ");
tok2 = strtok(line2, " ");
while (NULL != tok && NULL != tok2)
{
/* Do stuff with tok and tok2 here */
if (strcmp(tok, tok2)... {}
/* Update strtok pointers */
tok += strlen(tok) + 1;
tok2 += strlen(tok2) + 1;
/* Get next token */
tok = strtok(tok, " ");
tok2 = strtok(tok2, " ");
}
Вам все равно нужно будет добавить логику для определения, отличаются ли строки - вы не сказали, являются ли файлыэквивалентны, если разрыв строки происходит в другой позиции, но слова, окружающие его, одинаковы.Я предполагаю, что это должно быть, учитывая ваше описание, но это делает логику более неловкой, поскольку вам нужно только выполнить начальные fgets () и strtok () для файла, если у вас еще нет токена.Вам также нужно посмотреть, как читаются файлы. В настоящее время ваш первый цикл while просто читает строки до конца файла без их обработки.