Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    68

    [C] Lettura intera stream

    Scusate, è da poco che ho iniziato a studiare file, puntatori in c, credo con una conoscienza abbastanza sufficente... Tuttavia mi sono inceppato su questa funzione
    codice:
    char *readall(char *flnm){
       
      FILE *stream, *fopen();
      stream = fopen(flnm,"r");
      if(stream == NULL){
        return NULL;
      }
      int size = sizeoff_s(stream);
      if(timem(size) == 0){
        return NULL; //no memory
      }
      char c;
      char *tr;
      int i = 0;
      while((c = getc(stream))!=EOF){
        tr[i] = c;
        i++;
      }
      fclose(stream);
      return tr;
       
     }
    Mi restituisce un Segmentation Fault... Non ho molto chiaro il concetto di array in puntatori magari se me lo potreste spiegare meglio ve ne sarei grato... Grazie, ciao!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    68
    P.S. la funzione sizeoff_s è questa
    codice:
     int sizeoff_s(FILE *stream){
       int size;
       fseek(stream, 0, SEEK_END);
       size = ftell(stream);
       fseek(stream, 0, SEEK_SET);
       return size;
     }
    e timem

    codice:
    int timem(int size){
      int *m = malloc(size);
      if(m == NULL){
        return 0;
      }else{
        return 1;
      }
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Leggi qui.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    68
    Ok, grazie, ho risolto cosi... avevo dimenticato delle cose U.u
    codice:
     char *readall(char *flnm){
       
      FILE *stream, *fopen();
      stream = fopen(flnm,"r");
      if(stream == NULL){
        return NULL;
      }
      int size = sizeoff_s(stream);
      char *tr = mall(size);
      if(tr==NULL){
        return NULL;
      }
      
      char c;
      int i = 0;
      while((c = getc(stream))!=EOF){
        tr[i] = c;
        i++;
      }
      fclose(stream);
      return tr;
       
     }
    codice:
    char *mall(int size){
      char *m = (char *)malloc(size);
      if(m == NULL){
        return m;
      }else{
        return m;
      }
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.