У меня есть проблема с защитным программированием, которую я не знаю, как решить.
У меня есть эта функция, которая принимает путь файла и размер таблицы (количество строк / столбцов) в качестве аргументов, и я ищу лучший способ проверки входного файла. Я предполагаю, что аргументы этой функции всегда верны. size
представляет «меньшую сторону» таблицы, которая хранится в файле:
Например:
1 2 3 4
5 6 7 8
размер = 2
правильно, пока
1 2 3 4 5
5 6 7 8 9
размер = 2
неверно
Я также хотел бы иметь возможность отклонить файлы, подобные этому
1 2 3 4 5 6 7 8
size = 2 (который принимается через fscanf)
Другой тип файла, который я бы хотел отклонить, это
1 2 3
4 5 6
размер = 2
На данный момент моя единственная защита - проверка, действительно ли элементы файла являются числами.
Вот код, который я сделал до сих пор:
void import(float** table, int size, char* path)
{
FILE* data = fopen(path, "r");
assert(data);
int i,j;
int st;
for (i=0; i<size; i++)
{
for(j=0; j<(size*2)-1; j++)
{
st = fscanf(data, "%f", &table[i][j]);
if (!st)
{
printf("Error while importing the file.\n");
fclose(data);
return -1;
}
}
}
fclose(data);
}
На самом деле я не знаю, с чего и как начать, я не очень опытный в C, и, кажется, существует множество функций и механизмов, чтобы делать то, что я хочу, но все они кажутся очень сложными, а некоторые на самом деле длиннее, чем код, который я предоставил.
Если кто-нибудь может указать мне правильное направление, это было бы здорово.