我尝试计算c中文件的校验和。
我有一个大约100MB的随机文件,我想计算校验和。
我从这里尝试这个代码: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 (! fof (fp) &&! ferror (fp))">
任何帮助都将不胜感激。
这里的问题是您没有检查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;
}