无法区分C代码

时间:2015-12-28 04:33:18

标签: c

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)文件"

时出错

愿任何人帮助我

2 个答案:

答案 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]为空或为空。请检查是否必须在命令行中指定文件名。