2015-12-28 47 views
-4
int main(int argc, char *argv[]) 
    { 
     FILE *fp, *fp1, *fp2; 
     char line[200], temp[50], prev_het[5], curr_het[5], pdb_id[5], conneected_residues[10000], pres_name[4], pres_no[9], curr_temp[5], lig_atom[6], is_reesidue_present[10], curr_het_num[9], prev_het_num[9], chain_prot[2], chain_lig[2]]; 
     p_atom *front, *present; 

     double het_x, het_y, het_z, dist; 
     int flag, comma_indicator, no_of_het_atoms = 0, nmr_flag = 0, prot_ccount =0, connected_het = 0, connected_prot = 0, atom_flag = 0; 

     front = present = NULL; 
     prev_het[0] = curr_het[0] = '\0'; 
     fp = fopen(argv[1], "r"); 

     if(fp == NULL)if(fp == NULL) 
     { 
      printf("Error in opening %s file",argv[1]); 
      exit (0); 
     } 

大家好, 這是我C代碼的一部分。我無法理解如何在下文中提到執行這個代碼,因爲它是給錯誤:無法優於C代碼

「錯誤的開口(空)文件」

月請人幫我出

+3

你如何運行該程序?您必須在命令行參數中輸入文件名才能運行此命令。 – Haris

+0

您沒有在命令行上傳遞任何參數。 –

+0

我沒有正確運行它... – Laxmi

回答

0

從錯誤來看,我認爲argv[1]是空的或爲空。請檢查是否必須在命令行上指定文件名。

2

如果你得到的錯誤:

Error in opening (null) file 

的話,通常是因爲你提供了一個NULL指針fopen()雖然,因爲這在技術上是未定義的行爲,所有的賭注都關閉,以什麼會實際上發生。

由於fopen()的參數是argv[1],所以幾乎肯定是因爲您沒有使用參數運行程序。

換句話說,你在做myprog而不是myprog myfile,這意味着第一個參數將是NULL(正如標準所要求的那樣)。

在任何情況下,你應該防守編程以捕獲特定的問題,喜歡的東西:

if (argc < 2) { 
    fprintf (stderr, "Not enough parameters\n"); 
    return 1; 
} 

FILE *fp = fopen (argv[1]); 
if (fp == NULL) { 
    fprintf (stderr, "Cannot open file\n"); 
    return 1; 
} 
: 
// Can probably assume it's okay now. 
: 
fclose (fp); 
return 0; 

您可能還需要考慮:

if(fp == NULL)if(fp == NULL) 

我m非常肯定(除非你使用線程),如果是第一次是NULL,那麼第二次也會是NULL :-)