Возможно, что одна из строк во входном файле содержит поле, которое больше, чем строковая переменная, которую вы передаете fscanf()
. Это может привести к переполнению буфера, что позже приведет к бесконечному циклу. Просто предположение. Я предлагаю разделить %s
в строке формата fscanf()
с максимальной длиной выходной строковой переменной.
Например, это обеспечит отсутствие переполнения буфера и завершение строк:
fscanf(fpi," %10s %8s %2s %15s %49s %2s", date, time, temp, ip, temp, url);
date[10] = '\0';
time[8] = '\0';
ip[15] = '\0';
temp[2] = '\0';
url[499] = '\0';
Кроме того, вы читаете темп дважды. Последнее чтение переопределит первое. Это то, что вы намеревались?
Другое улучшение, предполагающее, что входной файл заканчивается строкой, а каждый журнал находится в отдельной строке, - это использование fgets()
для чтения строки и только затем использование sscanf()
в промежуточном буфере. Таким образом, вы гарантируете, что ошибки форматирования не выходят за пределы одной строки. Кроме того, sscanf возвращает количество прочитанных элементов, в вашем случае - 6. Было бы безопаснее проверить возвращаемое значение.