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代码的一部分。我无法理解如何执行此代码,因为它提供了如下所述的错误:
"打开(null)文件"
时出错愿任何人帮助我
答案 0 :(得分:2)
如果您收到错误:
Error in opening (null) file
那么通常是因为你提供了一个指向fopen()
的NULL指针,因为这是技术上未定义的行为,所有的赌注都是关于实际发生的事情。
由于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)
我非常肯定(除非你正在使用线程),如果它是NULL
第一次,它也将是NULL
第二次: - )
答案 1 :(得分:0)
从错误看,我认为argv[1]
为空或为空。请检查是否必须在命令行中指定文件名。