argc e argv
Leggere gli argomenti del programma
argc e argv è una lezione C Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C Academy include 4 lezioni in totale.
I programmi ricevono argomenti
Quando eseguite un programma da un terminale, potete passargli parole aggiuntive chiamate argomenti della riga di comando.
Il C li trasmette a main attraverso due parametri: argc (conteggio degli argomenti) e argv (vettore degli argomenti).
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("This program received %d arguments\n", argc);
return 0;
}La firma di main
La forma completa di main è:
int main(int argc, char *argv[])
argc è il numero di argomenti. argv è un array di puntatori a stringhe, uno per ogni argomento.
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("argc = %d\n", argc);
return 0;
}argv[0] è il nome del programma
Il primo elemento, argv[0], è il nome (o il percorso) utilizzato per richiamare il programma.
Per questo motivo argc è almeno 1 anche quando l'utente non passa argomenti aggiuntivi.
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("Program name: %s\n", argv[0]);
return 0;
}Stampa di tutti gli argomenti
È possibile eseguire un ciclo dall'indice 0 a argc - 1 per visitare ogni stringa di argomento in argv.
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 0; i < argc; i++) {
printf("argv[%d] = %s\n", i, argv[i]);
}
return 0;
}argv è terminato da NULL
Secondo lo standard C, argv[argc] è garantito essere un puntatore NULL.
Ciò significa che è possibile eseguire il ciclo fino a incontrare NULL invece di usare argc, anche se il conteggio con argc è più comune.
#include <stdio.h>
int main(int argc, char *argv[]) {
char **p = argv;
while (*p != NULL) {
printf("%s\n", *p);
p++;
}
return 0;
}Gli argomenti sono sempre stringhe
Ogni argomento arriva come stringa, anche se si tratta di numeri. Se un utente passa 42, si riceve il testo "42", non l'intero.
È necessario convertirlo autonomamente con funzioni come atoi o strtol.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
if (argc > 1) {
int n = atoi(argv[1]);
printf("Number plus one is %d\n", n + 1);
} else {
printf("Pass a number\n");
}
return 0;
}Verifica del numero di argomenti
Verifichi sempre argc prima di leggere argv[i]. L'accesso a un indice oltre gli argomenti forniti produce un comportamento non definito.
Un controllo tipico verifica che siano stati forniti argomenti sufficienti e, in caso contrario, stampa un messaggio sull'utilizzo.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc < 2) {
printf("Usage: %s <name>\n", argv[0]);
return 1;
}
printf("Hello, %s!\n", argv[1]);
return 0;
}Uso di un codice di uscita diverso da zero
Quando gli argomenti non sono corretti, restituisca un valore diverso da zero da main per segnalare l'errore alla shell.
Per convenzione, 0 indica il successo e qualsiasi altro valore indica che si è verificato un errore.
#include <stdio.h>
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Need exactly 2 arguments\n");
return 1;
}
printf("Got both arguments\n");
return 0;
}Somma di argomenti numerici
Un esempio pratico: sommare tutti i numeri passati dalla riga di comando, convertendo ciascuno con atoi e accumulando un totale.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int sum = 0;
for (int i = 1; i < argc; i++) {
sum += atoi(argv[i]);
}
printf("Sum = %d\n", sum);
return 0;
}Notazione alternativa per argv
Potrebbe vedere char **argv al posto di char *argv[]. Come parametro di funzione, indicano la stessa cosa: un puntatore al primo puntatore a stringa.
Entrambe le forme consentono di usare l'indicizzazione con argv[i].
#include <stdio.h>
int main(int argc, char **argv) {
if (argc > 1)
printf("First arg: %s\n", argv[1]);
return 0;
}Ripetizione degli argomenti
Il comando classico echo si limita a stampare i propri argomenti. Ecco una versione minimale che li unisce con degli spazi.
#include <stdio.h>
int main(int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
printf("%s", argv[i]);
if (i < argc - 1) printf(" ");
}
printf("\n");
return 0;
}Verifica rapida
Verifichi la Sua comprensione di argc e argv.
Riepilogo
Ha imparato come i programmi leggono l'input dalla riga di comando:
main(int argc, char *argv[])riceve il conteggio e l'array.- argv[0] è il nome del programma; gli argomenti effettivi iniziano dall'indice 1.
argv[argc]è NULL.- Gli argomenti sono sempre stringhe; converta i numeri con
atoie verifichi primaargc.
Domande Frequenti
La lezione «argc e argv» è gratuita?
Sì — il testo completo di «argc e argv» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C Academy, passa a CoddyKit PRO. Il corso C Academy include 4 lezioni in totale.
Cosa imparerò in «argc e argv»?
Leggere gli argomenti del programma Eserciti C Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C Academy?
Non è richiesta alcuna esperienza precedente. C Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «argc e argv»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C Academy?
Sì. Ogni lezione C Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.