PDA

View Full Version : aiuto con questi puntatori


khri81
11-05-2005, 12:47
salve, è da molto tempo che nn uso i puntatori di puntatori e sono un pò arruginito, coma faccio a scrivere dentro questa struttura???

e come faccio a leggere?

struct command_strucut{
char *name;
char **argv;
}*command;

in *name ok lo so come si fa, ma in **argv???

DanieleC88
11-05-2005, 13:00
Non ricordo se command->*argv[x] o *command->argv[x]...

Ziosilvio
11-05-2005, 13:46
struct command_strucut{
char *name;
char **argv;
}*command;
Vediamo: o assegni direttamente come puntatore:
command->argv=args; /* args e' la lista di argomenti */
oppure allochi in quantita' sufficiente e poi assegni:
command->argv=(char**)malloc(nargs*sizeof(char*)); /* nargs e' il numero di elementi di args */
for (i=0; i<nargs; i++)
command->argv[i]=args[i];
oppure infine allochi in quantita' sufficiente e poi copi:
command->argv=(char**)malloc(nargs*sizeof(char*));
for (i=0; i<nargs; i++) {
command->argv[i]=(char*)malloc(strlen(args[i])+1);
strcpy(command->argv[i],args[i]);
}
Ti faccio osservare che non ho scritto il codice per il controllo degli errori, e devi mettercelo tu ;)

EDIT: l'allocazione di command->argv era sbagliata; adesso e' giusta.

sukoy27k
11-05-2005, 14:33
oppure infine allochi in quantita' sufficiente e poi copi:
command->argv=(char**)malloc(nargs);


credo sarebbe più corretto
command->argv=(char**)malloc(nargs*sizeof(char*));


char** identifica un puntatore ad un vettore di puntatori,immaggina una matrice tanto per capirci.

Ziosilvio
11-05-2005, 14:41
credo sarebbe più corretto
command->argv=(char**)malloc(nargs*sizeof(char*));

Infatti e' corretto come dici tu :ops:
Chiedo scusa, adesso correggo.