我正在尝试从二进制文件中读取数据。我得到了一个包含所有变量的结构来提取数据。我正在使用fread函数,我需要将文件的总大小作为freads输入之一。我正在使用ftell函数来查找大小,但是当我调用ftell函数时,我遇到了分段错误。
这是我的代码:
#include<iostream>
#include<fstream>
#include<stdio.h>
using namespace std;
struct header{
int so_on;
int so_forth;
int etc;
};
int main(){
FILE *fin;
header cvvHeader;
fin=fopen("file.binaryextension","r");
int headersize= sizeof(header);
header* ptr=&cvvHeader;
long filesize =ftell (fin); //Segmentation fault happens here
fread(ptr,headersize,filesize,fin);
}
感谢您的帮助
答案 0 :(得分:2)
以下代码产生问题,您需要检查fin是有效还是NULL。
fin=fopen("file.binaryextension","r");
//....code
long filesize =ftell (fin); //Segmentation fault happens here
// fin should be non-null pointer when file is successfully opened.
if(fin) {
long filesize =ftell (fin);
}
答案 1 :(得分:0)
有几个问题:
要打开文件file.binaryextension
进行阅读,您需要将其置于正确的路径中:
如果您直接运行程序(例如,通过单击它或从命令行调用它),那么它应该与可执行文件位于相同的路径中。
如果从Visual Studio运行程序,则路径通常是vcproj
文件所在的位置。或者,您可以在项目设置中更改路径本身。
为了获得文件的大小:
致电fseek(fin,0,SEEK_END)
。
致电long filesize = ftell(fin)
。
致电fseek(fin,0,SEEK_SET)
。
为了从文件中读取标题数据:
致电fread(ptr,headersize,1,fin)
。
为了从文件中读取剩余数据:
致电char* data = (char*)malloc(filesize-headersize)
。
致电fread(data,filesize-headersize,1,fin)
。
使用完毕后致电free(data)
。