C Academy · Lekcja

argc i argv

Odczytywanie argumentów programu

Lekcja 1 z 413 kroki

argc i argv to bezpłatna lekcja C Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C Academy zawiera 4 lekcji w sumie.

Programy otrzymują argumenty

Podczas uruchamiania programu w terminalu można przekazać mu dodatkowe słowa nazywane argumentami wiersza poleceń.

C przekazuje je do funkcji main za pomocą dwóch parametrów: argc (liczba argumentów) i argv (wektor argumentów).

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("This program received %d arguments\n", argc);
    return 0;
}

Sygnatura main

Pełna postać funkcji main to:

  • int main(int argc, char *argv[])

argc to liczba argumentów. argv to tablica wskaźników do napisów, po jednym dla każdego argumentu.

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    return 0;
}

argv[0] to nazwa programu

Pierwszy element, argv[0], to nazwa (lub ścieżka) użyta do wywołania programu.

Dlatego argc ma wartość co najmniej 1, nawet gdy użytkownik nie przekazuje żadnych dodatkowych argumentów.

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Program name: %s\n", argv[0]);
    return 0;
}

Wyświetlanie wszystkich argumentów

Można przejść w pętli od indeksu 0 do argc - 1, aby odwiedzić każdy łańcuch argumentu w 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 jest zakończone wskaźnikiem null

Zgodnie ze standardem C element argv[argc] ma gwarantowaną wartość wskaźnika NULL.

Oznacza to, że można wykonywać pętlę aż do napotkania NULL, zamiast używać argc, choć częściej stosuje się zliczanie za pomocą argc.

#include <stdio.h>

int main(int argc, char *argv[]) {
    char **p = argv;
    while (*p != NULL) {
        printf("%s\n", *p);
        p++;
    }
    return 0;
}

Argumenty są zawsze łańcuchami

Każdy argument jest przekazywany jako łańcuch, nawet liczby. Jeśli użytkownik przekaże 42, otrzymują Państwo tekst "42", a nie liczbę całkowitą.

Należy samodzielnie przekonwertować go za pomocą funkcji takich jak atoi lub 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;
}

Sprawdzanie liczby argumentów

Zawsze należy sprawdzić argc przed odczytaniem argv[i]. Uzyskanie dostępu do indeksu wykraczającego poza przekazane argumenty powoduje niezdefiniowane zachowanie.

Typowe zabezpieczenie sprawdza, czy przekazano wystarczającą liczbę argumentów, a w przeciwnym razie wyświetla komunikat o użyciu programu.

#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;
}

Używanie niezerowego kodu zakończenia

Gdy argumenty są nieprawidłowe, należy zwrócić z main wartość różną od zera, aby zasygnalizować powłoki błąd.

Zgodnie z przyjętą konwencją 0 oznacza powodzenie, a każda inna wartość oznacza wystąpienie błędu.

#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;
}

Sumowanie argumentów liczbowych

Praktyczny przykład: należy zsumować wszystkie liczby przekazane w wierszu poleceń, konwertując każdą z nich za pomocą atoi i dodając ją do sumy.

#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;
}

Alternatywna notacja argv

Można spotkać zapis char **argv zamiast char *argv[]. Jako parametr funkcji oznaczają one to samo: wskaźnik do pierwszego wskaźnika łańcucha.

Oba zapisy pozwalają używać indeksowania za pomocą argv[i].

#include <stdio.h>

int main(int argc, char **argv) {
    if (argc > 1)
        printf("First arg: %s\n", argv[1]);
    return 0;
}

Wyświetlanie argumentów

Klasyczne polecenie echo po prostu wyświetla swoje argumenty. Oto jego minimalna wersja, która łączy je spacjami.

#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;
}

Szybkie sprawdzenie

Sprawdź swoją wiedzę na temat argc i argv.

Podsumowanie

Dowiedzieli się Państwo, jak programy odczytują dane wejściowe z wiersza poleceń:

  • main(int argc, char *argv[]) otrzymuje licznik oraz tablicę.
  • argv[0] to nazwa programu; właściwe argumenty zaczynają się od indeksu 1.
  • argv[argc] ma wartość NULL.
  • Argumenty są zawsze łańcuchami; liczby należy konwertować za pomocą atoi, a wcześniej sprawdzić argc.
Bezpłatny start

Ucz się C dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
39
Lekcje
144

Często zadawane pytania

Czy lekcja „argc i argv” jest bezpłatna?

Tak — pełny tekst „argc i argv” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C Academy, przejdź na CoddyKit PRO. Kurs C Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „argc i argv”?

Odczytywanie argumentów programu Ćwiczysz C Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C Academy?

Nie wymagamy żadnego doświadczenia. C Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „argc i argv”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C Academy?

Tak. Każda lekcja C Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. argc i argv
  2. Parsowanie opcji
  3. getopt
  4. Budowanie narzędzia CLI
← Powrót do C Academy