Master0
22-12-2016, 18:02
Salve, devo scrivere una funzione che legge un file contenente interi, inserendoli in un buffer e restituirne la dimensione. Ho scritto il codice ma nel main quando stampo l'array (che ho passato alla funzione come parametro di out) i valori non sono quelli attesi, invece, all'interno della funzione il buffer stampa correttamente i valori. Probabilmente avrò sbagliato il passaggio del parametro out? Qualcuno può aiutarmi?
#define S 20
long getFileToInt(char *filePath, int *result);
int main(int argc, char** argv) {
// inizializzo l'array
int* a = (int*)calloc(S, sizeof(int));
printf("Index\tValore\n");
for(int i=0;i<S;i++) {
a[i]=125+i;
printf("%i.\t%i\n", i, a[i]);
}
// caricamento file
char *filePath = "./test.txt";
FILE* fd = fopen (filePath, "wb");
if (fd==NULL) {fputs("File error",stderr); exit(1);}
// scrittura file
printf("SCRITTURA FILE\n");
for(int i=0;i<S;i++){
fwrite(&a[i], sizeof(int), 1, fd);
}
fflush(fd);
fclose(fd);
//----------------------------------------------
// leggo il file
printf("\nLETTURA FILE\n");
int* res = (int*)malloc(0);
int size = getFileToInt(filePath, res);
printf("File size: %i\n", size);
printf("Index\tValore\n");
for(int i = 0; i < size; i++)
printf("%i.\t%i\n",i, res[i]);
return (EXIT_SUCCESS);
}
long getFileToInt(char *filePath, int *result)
{
FILE * pFile;
long lSize;
size_t numCharRead;
pFile = fopen (filePath, "rb");
if (pFile==NULL) {fputs("File error",stderr); exit(1);}
fseek(pFile , 0 , SEEK_END);
lSize = ftell(pFile);
rewind(pFile);
if(lSize%4) { fputs("File error",stderr); exit(1); }
else lSize = lSize/4;
result = (int*) realloc(result, sizeof(int)*lSize);
memset(result, 0, sizeof(int)*lSize); // setto la memoria a 0
if (result == NULL) {fputs ("Memory error",stderr); exit (2);}
numCharRead = fread(result,sizeof(int),lSize,pFile);
if (numCharRead != lSize) {fputs ("Reading error",stderr); exit (3);}
fclose(pFile);
printf("File size: %i\n", lSize);
printf("Index\tValore\n");
for(int i = 0; i < lSize; i++)
printf("%i.\t%i\n",i, result[i]);
sleep(5);
return lSize;
}
#define S 20
long getFileToInt(char *filePath, int *result);
int main(int argc, char** argv) {
// inizializzo l'array
int* a = (int*)calloc(S, sizeof(int));
printf("Index\tValore\n");
for(int i=0;i<S;i++) {
a[i]=125+i;
printf("%i.\t%i\n", i, a[i]);
}
// caricamento file
char *filePath = "./test.txt";
FILE* fd = fopen (filePath, "wb");
if (fd==NULL) {fputs("File error",stderr); exit(1);}
// scrittura file
printf("SCRITTURA FILE\n");
for(int i=0;i<S;i++){
fwrite(&a[i], sizeof(int), 1, fd);
}
fflush(fd);
fclose(fd);
//----------------------------------------------
// leggo il file
printf("\nLETTURA FILE\n");
int* res = (int*)malloc(0);
int size = getFileToInt(filePath, res);
printf("File size: %i\n", size);
printf("Index\tValore\n");
for(int i = 0; i < size; i++)
printf("%i.\t%i\n",i, res[i]);
return (EXIT_SUCCESS);
}
long getFileToInt(char *filePath, int *result)
{
FILE * pFile;
long lSize;
size_t numCharRead;
pFile = fopen (filePath, "rb");
if (pFile==NULL) {fputs("File error",stderr); exit(1);}
fseek(pFile , 0 , SEEK_END);
lSize = ftell(pFile);
rewind(pFile);
if(lSize%4) { fputs("File error",stderr); exit(1); }
else lSize = lSize/4;
result = (int*) realloc(result, sizeof(int)*lSize);
memset(result, 0, sizeof(int)*lSize); // setto la memoria a 0
if (result == NULL) {fputs ("Memory error",stderr); exit (2);}
numCharRead = fread(result,sizeof(int),lSize,pFile);
if (numCharRead != lSize) {fputs ("Reading error",stderr); exit (3);}
fclose(pFile);
printf("File size: %i\n", lSize);
printf("Index\tValore\n");
for(int i = 0; i < lSize; i++)
printf("%i.\t%i\n",i, result[i]);
sleep(5);
return lSize;
}