Newsgroup: it.comp.lang.c
Titolo: Vettore di char in una struttura!

Salve a tutti,
sto cercando di implementare una piccola shell con un minimo di 
interattivita' (proprio un minimo!).
Ho questa struttura per memorizzare il nome del comando, gli argomenti e 
il numero di questi:
struct command_struct {
		int argc;
		char *argv[16];
}*command;
Ora ho una stringa (buf) nella quale ho memorizzato l'input dell'utente.
La domanda e': come faccio a memorizzare il primo valore in argv[0], il 
secondo in argv[1], etc...?
Ho usato una sscanf per recuperare le varie informazioni dalla stringa
sscanf (buf, "%s", command->argv[0])
ma mi da' segmentation fault!! Quello che non riesco a capire e' cosa 
scrivere al posto di "command->argv[0]".
Potete aiutarmi?
Grazie,
Maldoror.

       sequence and the terminating  NUL  character.
  e sottolineo: "and the array  must  be  large  enough  to  accept
all the sequence and the terminating  NUL  character."
   Devi fare prima: command->argv[0] = malloc(...);
-- 
S.L.


Grazie per la risposta, ma devo essere proprio ritardato perche':
command->argv[0] = (char *) malloc (sizeof(buf));
sscanf (buf,"%s",command->argv[0]);
fprintf (stderr,"%s",command->argv[0]);
mi da' ancora segmentation fault.
buf l'ho dichiarato cosi':
char buf[1024];
Maldoror.

 
Niente, ho risolto usando una variabile al posto di un puntatore alla 
struttura.(anche se mi e' rimasta la curiosita', eheheh)
Ora ho un altro problema: nel caso abbia diversi argomenti devo 
ovviamente memorizzarli nelle successive posizioni di argv[]. Ma non 
riesco a sapere quando sono alla fine della stringa con sscanf!
Scusate la domanda probabilmente molto banale e grazie ancora.
Maldoror.

 riesco a sapere quando sono alla fine della stringa con sscanf!
Come aveva cercato di mostrarti cortesemente S.L., la sscanf termina la sua 
operazione (equivalentemente a fscanf) quando:
1) incontra uno spazio bianco;
2) arriva alla fine della stringa buf;
3)...
quindi direi che devi aggiungere uno '\0' alla fine di ogni argv[i].
Ti da s.f. perchè la fprintf non trova lo '\0' alla fine di 
command->argv[0].
-- 
        Happy hacking,
        Gioco
Per inviarmi un' email cancella il 10.

 
Penso che ad aggiungere il terminatore di stringa '\0' ci pensi gia' la 
sscanf
dato che il primo argomento lo stampa (cioe' quello contenuto in argv[0]).
Il mio problema e' dire alla sscanf di guardare oltre la stringa appena 
letta. Infatti ora non fa altro che stamparmi in continuazione la prima 
stringa che memorizzo.
Grazie cmq!
Maldoror.

 Grazie cmq!
Prego, č un piacere anche per me rispondere cosě mi esercito un po'!
Spero di aver centrato l'obiettivo...!? :)


 passati alla tua shell.
Beh io argc ancora non ce l'ho perche' lo ricavo poi da quanti slot di 
argv ho riempito. (cioe' argc=i, semplicemente).
Il problema e' questo:
command.argv[0]=(char *)malloc(sizeof(buf));
sscanf (buf,"%s",command.argv[0]);
Ora in argv[0] e' presente il primo argomento, ma se ripeto la scansione 
anche indicizzanto argv[] otterro' sempre il primo argomento perche' da 
quello che mi sembra di capire buf rimane inalterato!
Come leggo dopo il primo argomento?
Ho provato
*buf=*buf+strlen(command.argv[0]);
ma se provo a stampare *buf risulta un carattere che non ho digitato 
(credo che esca dal suo buffer e vada a leggere da qualche altra parte 
ma non capisco perche' dato che la stringa buf continua).
Maldoror.

 ma non capisco perche' dato che la stringa buf continua).
scusami! credo che prima non ho inquadrato il problema! =)
all'uni a me hanno dato un esercizio simile (ora ricordo!) che poneva il 
problema.
Beh, in quella occasione usavamo argc valorizzandolo dalla riga di comando, 
quindi penso di non poterti aiutare!
Vabč, c'ho provato! Andrą meglio next time ;)
