Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    [C]Caricare un file in memoria

    codice:
    Mappa.h:
    typedef struct _mappa
    {
            int *Mappa;
            int NRighe;
            int NColonne;
            int InizioX;
            int InizioY;
            int FineX;
            int FineY;
    } MAPPA;
    
    // Carico il labirinto
    MAPPA *CreaMappa( char *NomeFile );
    
    
    Mapp.c:
    #include <stdio.h>
    #include "Mappa.h"
    
    MAPPA *CreaMappa( char *NomeFile )
    {
          FILE *Lab;
          MAPPA *M;
          char *FileMappa;
          int i, j, Size;
          int result;
          
          M = (MAPPA*)malloc(sizeof(MAPPA));
          
          /* Controllo che il file sia correttamente aperto */
          if(( Lab = fopen(NomeFile, "r")) == NULL )
          {
               printf( "\nImpossibile aprire il file\n" );
          }
          else
          {
              /* Posiziono il cursore alla fine del file */
              fseek(Lab, 0L, SEEK_END);
              /* Salvo la lunghezza del file */
              Size = ftell(Lab);
              /* Riposiziono il cursore all'inizio del file */
              fseek(Lab, 0L, SEEK_SET);
          
              FileMappa = (char*)malloc(sizeof(char)*Size);
              /* Copio il file nel buffer */
              result = fread(FileMappa,sizeof(char),Size,Lab);
              
              printf("\nResult: %d", result);
              printf("\nSize: %d", Size);
              
              /*if ( result != Size ) 
              {
                   fputs("\nErrore nella lettura del file!\n", stderr);
                   system("PAUSE");
                   exit(1);
              }*/
              
              printf("Stampa il file salvato in memoria:\n");
              printf("%s", FileMappa);
               
              /* Chiudo il file */
              fclose(Lab);
              free(FileMappa);
          }  
    }
    il file Mappa.txt:
    codice:
    999999999999999999999115
    999999911111111111111199
    999999999999911111999999
    111999991111111199999999
    991111111199999999999999
    993999999999999999999999
    L'output sarà tutta la mappa e poi continua con altri caratteri sporchi.
    Inoltre:
    Result: 149
    Size: 154

    Non riesco a capire perchè Result non è uguale a Size.

    Come posso sapere il numero di righe e di colonne poichè devo salvare le informazione rispettivamente nei campi M->NRighe e M->NColonne della struttura?

    Grazie anticipatamente.
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    codice:
    FileMappa = (char*)calloc(sizeof(char),Size);
    Modificando così, non stampa più caratteri sporchi ma Result è sempre uguale a 149 e Size a 154.
    Con i sogni possiamo conoscere il futuro...

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Devi aprire il file in binario

    fopen(NomeFile, "rb")

    altrimenti la lettura converte la sequenza CR-LF in LF e ottieni meno byte di quanti siano.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.