我有這個防禦性編程問題,我不知道如何解決。驗證輸入文件的內容
我有這個功能,需要文件路徑和表的大小(行/列數)作爲參數,我正在尋找更好的方式來驗證輸入文件。我假設這個函數的參數總是正確的。 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真正精通,大家似乎都存在很多功能和機制去做我想做的事情,但它們看起來都非常複雜,有些實際上比我提供的代碼更長。
如果任何人都可以指出我的方向會很棒。
是什麼* 「號= 2」 *是什麼意思? – LihO 2012-02-20 21:15:38
我不認爲我理解一個正確的文件是什麼樣子。我只能看到'2'總是對的。 – cnicutar 2012-02-20 21:15:52
@LihO輸入數字,代碼中的大小 – Sword22 2012-02-20 21:16:23