Ваш fgets()
вызов должен указать 45 в качестве размера или вы переполните буфер, когда fgets записывает терминатор NULL.Это установит строку «delims» в качестве пустой строки.
Также вы не возвращаете никакого значения, даже если в объявлении функции указано, что он возвращает int.
Я не знаю, чтоопределение вашего "struct student" такое, но вы можете переполнять буферы при использовании strcpy()
.Также вы уменьшаете "recordCtr".Зачем?Почему вы открываете файл для записи, если не можете открыть его для записи?Зачем?Если это тоже не удается, вы вызываете fclose для NULL-указателя.Я сомневаюсь, что это очень помогает.
Я только что заметил, что вы не инициализируете "число".Если вы не получите три числа в первой строке, вы получите strcpy()
из неинициализированного указателя.Вероятно, он имеет значение NULL, поэтому программа будет иметь ошибку по умолчанию.
Также у вас есть массив размера 3, но если в строке, которую вы читаете, более 3 полей, разделенных запятыми, вы переполните массив.1013 * Возможно, есть и много других ошибок.
Многие программисты просто не могут быть обеспокоены выполнением всех хороших практик кодирования, таких как проверка возвращаемых значений, инициализация переменных и так далее.Они часто заканчивают с таким кодом.Если вы хотите быть действительно хорошим программистом, попробуйте привыкнуть делать все эти вещи или, по крайней мере, всегда думать о том, нужно вам это или нет.
В этом коде так много потенциальных ошибок,Что происходит, если длина строки превышает 45 символов?Вы не раздеваете новые строки.Вы не конвертируете строки в числа (хотя число [1] выглядит как строковые данные, так зачем хранить их в массиве с именем «числа»?), Или проверяете, что fgets действительно вернул какие-либо данные, или проверьте, сколько частей данных выполучить.