Wenn ich einen FILE-Zeiger an eine Funktion übergebe, wird sie aktualisiert?Übergabe eines Dateizeigers an eine Funktion
Kann ich etwas wie das Folgende tun?
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 ...
}
}
Der obige Code funktioniert nicht (ich bekomme einen Segmentierungsfehler). Gibt es eine Möglichkeit, Teile einer Textdatei in verschiedenen Funktionen gemäß dem Abschnitt der Datei zu verarbeiten?
Verwenden Sie std :: ifstream, std :: getline und std :: string. –
_If * n ist nicht Null, die Anwendung muss sicherstellen, dass * lineptr entweder auf ein Objekt mit einer Größe von mindestens * n Bytes zeigt oder ein Nullzeiger ist._ [getline] (http://pubs.opengroup.org/ onlinepubs/9699919799/functions/getdelim.html). Sie haben key und len nicht initialisiert. –
der gepostete Code kompiliert nicht auf irgendeinem C++ - Compiler (der nicht "Segmentierungsfehler" genannt wird). –