PDA

View Full Version : [C] - Array di stringhe


clockover
04-12-2009, 16:52
Sarò breve! Ho creato una funzione che mi permette di inserire caratteri da terminale e mi restituisce un char **! Appena ho tra le mani l'altro computer lo posto per vedere se ci sono problemi!

Il problema mi sorge quando voglio passare questo array di stringhe al comando
execvp(char * cmd, char ** arg)
mi crea problemi! Non c'è qualche libreria che implementi già una funzione del genere?
Se non c'è al più presto posto la mia funzione per vedere se ci sono problemi in quella.. ciao

clockover
04-12-2009, 16:55
scusate devo aver cliccato una volta di troppo

bottomap
04-12-2009, 18:22
Ciao,

Che tipo di errore ti da? Non compila o non agisce come vorresti?

Ricorda che la prima stringa del vettore deve essere il nome del programma, i parametri partono da arg[1] in poi e devono terminare con un parametro NULL. In sostanza per aprire il notepad.exe su unfile.txt dovrai avere arg[0]="notepad.exe", arg[1]="unfile.txt" e arg[2]=0.

In memoria hai più semplicemente (nota i \0): "notepad.exe\0unfile.txt\0\0"

In ogni caso, se conosci il numero di parametri a priori potresti usare la analoga execlp che accetta un numero variabile di argomenti terminati da un NULL.

Ciaociao :)

clockover
05-12-2009, 08:48
Grazie della risposta! Guarda quando eseguo la exec sul char ** che ho creato io mi da errore in esecuzione! Comunque ora che ci penso forse ho capito dove sbaglio! Mannaggia che dove ho l'altro computer non ho internet! Oggi lo posto comunque..

clockover
05-12-2009, 15:27
char ** lettura(){
char **p;
p = malloc(MAXPAM * sizeof(char *));
int carattere, i, j;
for(i = 0; i<MAXPAM; i++)p[i] = malloc(MAXLEN * sizeof(char) + 1);
i = 0;
j = 0;
carattere = getchar();
while(carattere != '\n'){
if(carattere == ' '){
*(*(p + i) + j) = '\0';
j = 0;
++i;
}
else{
*(*(p + i) + j) = carattere;
++j;
}
carattere = getchar();
}
*(*(p + i) + j) = '\0';
return p;
}

l'ho fatto così... se vado a stampare a video funziona... non funziona se lo passo ad una execv(...)