我有这个防御性编程问题,我真的不知道如何解决。
我有这个函数,它将文件路径和表的大小(行/列计数)作为参数,我正在寻找更好的方法来验证输入文件。我假设这个函数的参数总是正确的。size
表示存储在文件中的表的“较小的一面”:
例如 :
1 2 3 4
5 6 7 8
size = 2 是正确的,而
1 2 3 4 5
5 6 7 8 9
size = 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,似乎存在很多功能和机制来做我想做的事情,但它们看起来都非常复杂,有些实际上比我的代码长假如。
如果有人能指出我正确的方向,那就太好了。