私はこの防御プログラミングの問題を抱えていますが、解決方法がよくわかりません。
ファイルパスとテーブルのサイズ(行/列数)を引数として取るこの関数があり、入力ファイルを検証するためのより良い方法を探しています。この関数の引数は常に正しいと思います。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
サイズ=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に精通しておらず、やりたいことを実行するための関数やメカニズムがたくさんあるようですが、それらはすべて非常に複雑に見え、実際にはコードよりも長いものもあります。提供された。
誰かが私を正しい方向に向けることができれば、それは素晴らしいことです。