Hej alle
Jeg har et mindre problem som jeg dog allerede har lavet en
work-around til.
Jeg har en struktur med programnavne. Nogen af dem er kendt i
forvejen, men programmet skal kunne håndtere at der dukker nye
op. Derfor har jeg en konstant struktur som jeg ved init() fører
over i en fleksibel ditto.
Jeg fandt ud af at det kunne gøres effektivt ved at den nye
struktur overtog den gamles datahukommelse direkte.
Typedef
=======
typedef struct programtype {
char *name, *displayname;
int users, messages, proggroup;
} programtype;
Konstant struktur:
==============
struct programtype program_const[] = {
"Forte","Forte (Free) Agent",0,0,-1,
"MacSOUP","",0,0,-1,
}
Fleksibel struktur:
==============
struct programtype *program[PROGRAMMAX];
int programmer;
init():
=====
for (nr=0; nr<programmer_const; ++nr)
program[nr]=&program_const[nr];
programmer=programmer_const;
Som det er nu, kommer program[].displayname til at pege på en tom
streng. Jeg forsøgte at få det til at blive en NULL-pointer i
stedet. Er det muligt? Jeg prøvede at skrive sådan:
"MacSOUP",NULL,0,0,-1,
og det kunne både kompileres og afvikles, men pointerne var ikke
NULL.
Det er ikke vildt vigtigt. Vi snakker om et halvt hundrede
overflødige, tomme strenge, men alligevel ...
PS. I behøver ikke kommentere opbygningen af den 'fleksible'
struktur. Den bliver ændret senere.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO:
http://fiduso.dk/