计算c中文件的校验和

c2e8gylq  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(152)

我试着用c来计算文件的校验和。
我有一个约100 MB的随机文件,我想计算校验和。
我从这里尝试以下代码:https://stackoverflow.com/a/3464166/14888108

int CheckSumCalc(char * filename){
    FILE *fp = fopen(filename,"rb");
    unsigned char checksum = 0;
    while (!feof(fp) && !ferror(fp)) {
        checksum ^= fgetc(fp);
    }
    fclose(fp);
    return checksum;
}

但是我得到了一个分段错误。在这一行中“while(!feof(fp)&&!ferror(fp))”
任何帮助都将不胜感激。

kulphzqa

kulphzqa1#

这里的问题是您没有检查fopen的返回值。如果无法打开文件,fopen将返回NULL。这意味着fp是一个无效的指针,从而导致分段错误。
您应该更改代码以检查fopen的返回值并相应地处理错误。

int CheckSumCalc(char * filename){
    FILE *fp = fopen(filename,"rb");
    if(fp == NULL)
    {
        //handle error here
        return -1;
    }
    unsigned char checksum = 0;
    while (!feof(fp) && !ferror(fp)) {
        checksum ^= fgetc(fp);
    }
    fclose(fp);
    return checksum;
}

相关问题