Newsgroup: it.comp.lang.c
Titolo: problemi di cattura testo da file per inserirlo in array di caratteri

Lo so oggi vi stò stressando, ma l' esame si avvicina e....
Sempre riallacciandomi al problema del post "rieccomi con un problemino..."
ho provato a scrivere un prog. che prende del testo da un file e lo copia in
un array di caratteri.
Il problema è che prende un carattere in meno all'inizio del file (es. se ne
file la prima parola è Prova il prog. salta la P e prende i successivi) e ne
aggiunge alla fine.
il codice 
http://rafb.net/paste/results/fbJM4X62.html
ma non riesco a trovare l' errore.
Ancora mille grazie.
Ciao.
Morpheus

 Giovanni
Purtroppo perchè non ci sono arrivato, :-P.
L' esperienza, la conoscenza e parecchia pratica, SOLO questo mi manca....
Grazie Giovanni, sempre gentile !
Ciao e buona serata.
Morpheus

 un array di caratteri.
Questo e' un metodo sporco e veloce per fare quello che chiedi.
Utilizza stat() per trovare la dimensione del file che proprio
standard non e'...
Alla fine a fileBuffP ci accedi come un normale array di
caratteri
<CODE>
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
int main(int argc, char* argv[])
{
   int retVal = 0;
   char* fileBuffP = NULL;
   struct stat fInfo = {0};
   FILE* fPtrP = NULL;
   if(argc > 1)
   {
      retVal = stat(argv[1], &fInfo);
      if(0 == retVal)
      {
         fileBuffP = calloc(1, fInfo.st_size);
         if(NULL != fileBuffP)
         {
            fPtrP = fopen(argv[1], "rb");
            if(NULL != fPtrP)
               retVal = fread(fileBuffP, 1, fInfo.st_size, fPtrP);
            if(retVal != fInfo.st_size)
               printf("Errore lettura file\n");
         }
      }
   }
   return retVal;
}
</CODE>
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 standard non e'...
Si può fare tutto con un metodo standard e delle realloc successive.
Il codice che segue è scritto al volte (i.e. potrebbero esserci errori).
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef unsigned char byte_t, *pbyte_t;
int main(int argc, char *argv[])
{
    FILE *fp;
    void *file_content=0;
    size_t file_content_size=0;
 
    printf("\ninizio lettura file\n");
    if ((fp=fopen("C:\\TDR2K\\tdr2000.exe", "rb"))) {
       size_t bytesRead=0;
       byte_t buf[8192];
       while ((bytesRead=fread(buf, 1, sizeof buf, fp))) {
          void *p=realloc(file_content, file_content_size+bytesRead);
          if (p) {
             file_content=p;
             memcpy((pbyte_t)file_content+file_content_size, buf, bytesRead);
             file_content_size+=bytesRead;
          }
          else
            break; /* errore */
       }
    }
    printf("\nfine lettura file (%d byte)\n", file_content_size);
    return 0;
}
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Il codice che segue è scritto al volte (i.e. potrebbero esserci errori).
"A volte" = "al volo" ;-)
Abbiate pazienza, è l'una di notte e sono di ritorno a casa dopo aver bevuto
un pò ;-))



Purtroppo fino ad ora stat() non la conoscevo, sono all'inizio con il C,
purtroppo ci sono parecchie cose che non so.
Vado a vedermi stat().
Grazie mille.
Ciao.
Morpheus

 un pò ;-))
Tranquillo... cmq avevamo capito ;-P
Ciao.
Morpheus

 Purtroppo fino ad ora stat() non la conoscevo, sono all'inizio con il C,
Se sei all'inizio, non ti conviene andare a studiare funzioni come stat(),
che appartengono a standard specifici, ma non allo standard del linguaggio.
Ti conviene prima imparare tutto ciò che puoi fare seguendo una via standard
e poi andare a studiare uno specifico sottosistema, a seconda della
piattaforma su cui lavori.


 piattaforma su cui lavori.
Ok seguirň il tuo prezioso consiglio.
Grazie Andrea.
Ciao
Morpheus