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 ...
}
}
上記のコードは機能しません(セグメンテーションフォルトが発生します)。ファイルのセクションに従って異なる機能のテキストファイルの部分を処理する方法はありますか?
std :: ifstream、std :: getlineおよびstd :: stringを使用します。 –
_If * nが0でない場合、アプリケーションは* lineptrが少なくとも* nバイト以上のサイズのオブジェクトを指しているか、またはヌルポインタであることを保証しなければならない。_ [getline](http://pubs.opengroup.org/ onlinepubs/9699919799/functions/getdelim.html)。キーとlenを初期化していません。 –
投稿コードは、C++コンパイラではコンパイルされません(セグメンテーションフォルトと呼ばれません)。 –