0Pricing
C Academy · Lezione

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 atoi e verifichi prima argc.

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.

Tutte le lezioni di questo corso

  1. argc e argv
  2. Analizzare le opzioni
  3. getopt
  4. Creare uno strumento CLI
← Torna a C Academy