Zeilenweise aus Datei einlesen, alternative zu getline(gcc)



  • Ich habe bisher über cygwin gnu gcc compiliert und gelinkt, da das programm unter windows dadurch aber die cygwin1.dll benötigt muss ich nun einen anderen weg gehen. Ich baue jetzt mein Programm um, damit ich es über den m$ visual studio Compiler compilieren kann.

    Ich habe die NICHT ansi c Konforme Funktion getline zum einlesen verwendet, die mir aber ja jetzt nicht zur Verfügung steht. Da ich aber nicht weiß, wie viele Zeichen eine Zeile hat, kann ich fgets nicht verwenden.
    Wie kann ich das Problem lösen?

    Ein 2tes Problem ist strsep das meckert mir der Compiler auch an, ich benötige das aber eigentlich auch. strok ist nicht ausreichend, weil es nicht Leere teile berücksichtigt z. B. |||aa|bb||cc => 1. "aa" 2. "bb" 3. "cc"
    ; strsep 1. "" 2. "" 3. "aa" 4. "" 5. "cc"

    Hat mir jemand Tipps zur Lösung?



  • Hi,

    freakx0 schrieb:

    Hat mir jemand Tipps zur Lösung?

    das Thema haben wir regelmäßig, daher verlinke ich mal hier und hier hin.

    MfG

    GPC



  • thx für die verweise zu den anderen threads!

    char
    *freadline (FILE *fp)
    {
      static char   *line      = NULL;
      static size_t  line_size = 1024;
    
      char   *cp;
      size_t  rest_size;
    
      if(!line) line=malloc(line_size);
    
      cp        = line;
      rest_size = line_size;
    
      while(fgets(cp,rest_size,fp), !ferror(fp) && strlen(cp)>0 && cp[strlen(cp)-2]!='\n' && !feof(fp))
      {
        line_size+=1024;
        realloc(line,line_size);
    
        rest_size = line_size-strlen(line);
        cp        = line+strlen(line);
      }
    
      return (ferror(fp) || !line[0] ? NULL : line);
    }
    
    int main(int argc, char **argv) {
    
            //Nur als Beispiel!
    
            char ch                 = NULL;
            char line[1024 + 1];
            FILE* stream            = (FILE*)NULL;
    
            stream = fopen( "test.txt", "rt" );
            if( stream == NULL)
                    return -1;
    
    	//	while( !feof(stream) ){
    			printf("%s \n", freadline(stream));
    	//	}
            fclose( stream );
     return 1;       
    }
    

    aber das funktioniert nicht... habe eigentlich den gleichen code wie http://www.c-plusplus.net/forum/viewtopic-var-t-is-130168-and-highlight-is-*zeilen*.html
    und es wird eine STATUS_ACCESS_VIOLATION ausgeworfen 😞

    any ideas??
    gruß
    Dominik


Anmelden zum Antworten