argc i argv
Odczytywanie argumentów programu
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.
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.