【发布时间】:2015-02-21 11:54:51
【问题描述】:
我正在测试命令 fread() 和 fseek,并编写了一个程序来比较两个程序的第二个字节。程序在指示的行(最后一个 fread())处给出了分段错误。
int main(int argc, char** argv)
{
FILE *file1, *file2;
long size1, size2;
long size1a, size2a;
char *name1, *name2;
char *temp1, *temp2;
if (argc != 3)
{
cout<<"Enter two file names"<<endl;
exit(1);
}
name1 = argv[1];
name2 = argv[2];
//open files
file1 = fopen(name1, "r");
file2 = fopen(name2, "r");
//get file size
fseek(file1, 0, SEEK_END);
size1 = ftell(file1);
rewind(file1);
fseek (file2,0,SEEK_END);
size2 = ftell(file2);
rewind(file2);
fseek(file1,1,SEEK_SET);
fseek(file2,1,SEEK_SET);
cout<<"1"<<endl; //----cout worked
fread(temp1,1,1,file1);
cout<<"2"<<temp1<<endl; //---cout worked. 2nd byte of file1 was printed.
fread(temp2,1,1,file2); //SEGMENTATION FAULT AT THIS LINE
if(*temp1==*temp2)
cout<<"same"<<endl;
else
cout<<"different"<<endl;
return 0;
}
虽然我通过定义更正了程序
char temp1, temp2;
写作
fread(&temp1,1,1,file1);
fread(&temp2,1,1,file2);
我仍然不知道是什么导致了第二个 fread 的 seg 错误,而第一个 fread 运行正确。分段错误的原因可能是什么?
【问题讨论】: