如果我将FILE指针传递给函数,是否更新了?
我可以执行以下操作吗?
FILE* fp;
size_t read, len;
char *key;
fp=fopen((tmpDir+"/"+filename).c_str(),"r");
while((read=getline(&key,&len,fp))!=-1){
if (header_section){
processHeader(fp);
}else{
processBody(fp);
}
}
fclose(fp);
void processHeader(FILE* fp){
size_t read, len;
char *key;
while((read=getline(&key,&len,fp))!=-1){
... do header processing ...
if(strcmp(key,"end_of_header")==0){
return;
}
}
}
void processBody(FILE* fp){
size_t read, len;
char *key;
while((read=getline(&key,&len,fp))!=-1){
... process body data ...
}
}
上面的代码不起作用(我收到了分段错误)。有没有办法根据文件的部分处理不同功能的文本文件的部分?
答案 0 :(得分:0)
是的,可以将FILE *
传递给函数。毕竟,各种标准C I / O函数接受一个指针参数。
但是,FILE
是一种不透明的类型。更新的FILE *
点(例如数据结构)是否是实现定义的。但是,如果您的代码在FILE *
上执行有效的操作(例如,将其传递给C I / O函数),则无法解释分段错误。
您提供的部分代码不足以确定“分段错误”的原因。可能的情况是,如果程序崩溃,程序中的某些代码会显示未定义的行为。但是,将作为FILE *
的返回值获得的fopen()
作为参数传递给函数的简单行为不是原因。您需要查看程序中的其他代码。
而且,在C ++中,使用C ++流比使用C / I函数更好。但是,最多只会改变症状。如果其他代码是导致未定义行为的原因,那么更改I / O方法(假设您正确执行)将无法解决此问题。