Newsgroup: it.comp.os.linux.development
Titolo: scusate sono quello dei salvataggi

vi ringrazio tutti per l'aiuto...
ho bisogno di un'ultima cosa poi posso partire :)
ma devo sapere per usare fwrite e fread la size delle struct...come la
capisco?
io ho una struct con 7 int e con 2 vettori di char da 15 posizioni...ma non
sempre occuperò tutti i campi...quindi? come calcolo?
mi sto perdendo in una stupidaggine?
grazie e ciao! spero mi rispondiate veloci come l'altro giorno :D
ciaooooooooooooooo

 
sizeof vero...? :) credo di aver capito

 sizeof vero...? :) credo di aver capito
si usi sizeof se hai una struttura fissa ... se invece devi memorizzare un
oggetto dinamico devi prima scrivere un memro di questa struttura che ti
ritorna il size che sta occupando in quel momento l'oggetto, e poi un'altro
metodo che ti ritorna i dati grezzi da scrivere.
seno' scriveresti solo dei puntatori che non avrebbero significato in un
file ... e perderesti i tuoi dati (ma questo solo in oggetti e strutture
dinamiche)
se invece hai una struct simile:
struct lotto
{
 int num[7];
char pippo[15];
char topolino[15];
};
usi sizeof ... come vedi le dimensioni sono gia' tutte prefissate e non ci
sono puntatori ad altri dati ...
ciao

 dinamiche)
me lo potresti spiegare un poco...? ti sarei gratissimo...o se no
indicarmi dove trovare qualcosa da leggere...il kerrghan ritchie non lo
spiega...
grazie e ciao
un esempio breve sarebbe il top

"gigio" <ci...@ciao.ciao> ha scritto nel messaggio
news:pan.2003.07.30....@ciao.ciao...

penso lo spieghi anche lui ... quando spieghera allocazione dinamica della
memoria puntatori ecc ...
cmq il discorso in breve e' ... se hai una struttura con un puntatore ad un
array dinamico esterno es:
struct darray {
int size;
int *array;
};
vedi benissimo che se salvi solo la struttura salveresti un int che ti dice
il numero di elementi, e poi un puntatore che non ti servirebbe a nulla ...
quindi per salvare questa struttura dovresti costruirti un membro o una
funzione (dipende da che linguaggio usi se OOP o procedurale) che ti salvi
direttamente sul tuo stream la funzione.
es io in un programma alloco il mio darray cosi' :
int main()
{
darray myda;
int arraysize = 5;
myda.array = (int*)malloc(sizeof(int)*arraysize);
myda.size = arraysize;
for (int i=0;i<myda.size;i++) myda.array[i] = i+1;
...
...
...
ora se voglio salvare la struttura cosi' come e' ...
dovrei avere una funzione che mi salva il contenuto dell'array e non solo la
struttura ... quindi:
void salva_darray(darray &x)
{
printf("%d\n",x.size);
for (int i=0;i<x.size;i++) printf("%d\t",x.array[i]);
printf("\n");
}
ora l'esempio tel'ho fatto con le printf poi se usi file o che altro lo
sistemi ...
ti posto sotto il codice di tutto il programma almeno ci puoi giocare.
--------------code begin------------
#include <stdlib.h>
#include <stdio.h>
struct darray {
int size;
int *array;
};
void salva_darray(darray &x)
{
printf("%d\n",x.size);
for (int i=0;i<x.size;i++) printf("%d\t",x.array[i]);
printf("\n");
}
int main()
{
darray myda;
int arraysize = 5;
myda.array = (int*)malloc(sizeof(int)*arraysize);
myda.size = arraysize;
for (int i=0;i<myda.size;i++) myda.array[i] = i+1;
salva_darray(myda);
system("pause");
}
--------code end-------------

> Il Thu, 31 Jul 2003 00:23:34 +0200, Goul_duKat ha scritto:
Grazie sei stato molto disponibile....veramente...grazie! ciao!