Вот что вы делаете:
Считать строку из файла в tmp
.
Проверьте, присутствует ли введенная пользователем строка par
в tmp
.
Если да, вы идете вперед и токенизируете tmp
на /
и делаете указатель machine
, указывающий на первый кусок, и ip_add
, указывающий на следующий кусок.
Обратите внимание, что machine
и ip_add
являются просто указателями . И они указывают на различные показатели tmp
. Поэтому позже, продолжая цикл, вы снова читаете новую строку в tmp
, перезаписывая ее. Это вызывает проблему, и ваш указатель теперь указывает на измененную строку.
Чтобы избежать этого, просто добавьте перерыв после успешного матча:
if (strstr(tmp, par)) {
flag = "1";
machine = strtok(tmp, "/");
ip_add = strtok(NULL, "/");
break;
}
Также ваш финал printf
:
printf("flag= %s pc=%s server=%s\n", flag, machine, ip_add);
должен быть частью вашего if
тела, так что вы печатаете их, только если нашли совпадение.
В настоящее время вы печатаете, даже если совпадение не найдено. В этом случае вы будете печатать ненужную информацию, поскольку ваши указатели server
и ip_add
не имеют инициализации .