PDA

View Full Version : [C] Domanda banale su argv


magnamel
07-08-2011, 13:07
Ciao a tutti e' da poco che TENTO di programmare in C ed avrei un dubbio a riguardo.
argv[ ] e' un array di puntatori a carattere ove ogni puntatore punta al primo carattere della stringa relativa all'argomento, giusto?
Questo significa che l'array argv contiene dei puntatori, giusto?.
Allora perche' se scrivo argv[1] mi restituisce il primo argomento e non l'indirizzo al primo argomento? Non sarebbe piu' corretto scrivere *argv[1] per riferirsi all' argomento?

Esempio:
printf ("%s", argv[1]) funziona, ma non sarebbe corretto scrivere printf ("%s", *argv[1]) ?

Grazie anticipatamente
Saluti

ndakota
07-08-2011, 13:56
Ciao a tutti e' da poco che TENTO di programmare in C ed avrei un dubbio a riguardo.
argv[ ] e' un array di puntatori a carattere ove ogni puntatore punta al primo carattere della stringa relativa all'argomento, giusto?


Sì, ok.


Questo significa che l'array argv contiene dei puntatori, giusto?.


Giusto.


Allora perche' se scrivo argv[1] mi restituisce il primo argomento e non l'indirizzo al primo argomento? Non sarebbe piu' corretto scrivere *argv[1] per riferirsi all' argomento?

Esempio:
printf ("%s", argv[1]) funziona, ma non sarebbe corretto scrivere printf ("%s", *argv[1]) ?

Grazie anticipatamente
Saluti

Io credo sia dovuto al comportamente della printf. Tu le passi sì un puntatore ma lei stampa i caratteri puntati dall'inizio di quel puntatore fino ad arrivare ad un \0.
Se le passassi *argv[1] le passeresti un intero. Perchè argv[1] è un puntatore a carattere, *argv[1] se mai ti dovrebbe stampare un carattere ma tu mettendo %s le dici che le passerai una stringa. Infatti se lo fai ricevi un errore.

Non ho provato ma potresti fare questa prova:
printf ("%c", *argv[1]);

magnamel
07-08-2011, 15:03
Credo proprio tu abbia ragione.

Facendo queste prove ottengo:
printf ("\n%c\n", *argv[0]); . (lancio il programma dalla directory corrente)
printf ("\n%s\n", argv[0]); ./nomeprogramma
printf ("\n%p\n", argv[0]); 0x7fff46d06679 (indirizzo)
printf ("\n%d\n", *argv[0]); il decimale in ASCII del punto


Fugato ogni dubbio
GRAZIE