Czy dobrze rozumiem int argc string argv[]?

0

Witajcie,
oto mój kod:

int main(int argc, string argv[])
{
   if(argv[1] == 3)         
  {
    printf("ok\n");
  }
  else 
  return 0;
}

Program się nie kompiluje, wywala błędy mówiące (chyba) o niepoprawnym porównywaniu pointerów (zmiennej?) z intem.

r.c:8:14: error: comparison between pointer and integer ('string' (aka 'char *') and 'int') [-Werror]

Co to oznacza? Debuger nie wie o co chodzi. Zamieniam 3 linijkę kodu na:

 if(argv[1] == 'a')

I błąd cały czas ten sam.

Udało mi się zmodyfikować kod na tyle - że przynajmniej się kompiluje, ale nie mogę go w żaden sposób teraz uruchomić:

int main(int argc, string argv[])
{
  int d = 4;
  if((int)argv[1] == d)
  {
    printf("ok\n");
  }
  else 
  return 0;
}

no i dalej nie osiągnałem tego, czego chcę, a mianowicie - chciałbym, aby program otworzył się dopiero, jeżeli wpiszę w konsolę ./nazwaprogramu 4 ... albo, idąc krok dalej - ./nazwaprogramu jakakolwiekliczbacałkowita.
Mógłby ktoś mi powiedzieć czego nie rozumiem? a jeszcze lepiej - wprost dlaczego mi to nie działa, jak to poprawić?

Dziękuję i pozdrawiam

0

Czym jest string?

0

argv jest wektorem (nie mylić z std::vector z C++!) C-stringów, czyli tablicą tablic charów. Zatem argv[1] to C-string, czyli tablica charów, czyli ani nie int, ani nie char, więc porównanie z nimi nie ma (niemal nigdy) sensu, więc kompilator Cię okrzyczał. Jak go zrzutujesz na siłę do inta, to będziesz tam miał jej adres w pamięci — nic specjalnie sensownego.

Chcesz użyć jakiejś funkcji operującej na C-stringach, np. strcmp czy atoi.

1

Czy dobrze rozumiem int argc string argv[]?
Absolutnie nie.

Czytałeś cokolwiek nt C? Na pierwszych kartkach wszystko jest podane
Więc wiedzy sobie poszukaj, pierwsza pozycja w googlu wystarczy.

Dodam tylko NIE RZUTUJ. W początkowych programach to niemal nigdy nie jest potrzebne, a ślicznie zamiata śmieci pod dywan

0
AnyKtokolwiek napisał(a):

Czytałeś cokolwiek nt C? Na pierwszych kartkach wszystko jest podane
Więc wiedzy sobie poszukaj, pierwsza pozycja w googlu wystarczy.

Problem polega na tym, że jest to mój pierwszy jęyk programowanie i nawet takie pojęcia jak zmienne, funkcje, szeregi są dla mnie tylko intuicyjne. Czytanie wszystkiego co wpadnie mi w rękę chyba mija się z celem? A znalezienie dobrze dobranego rozdziału/artykułu pod mój problem jest również dla mnie wyzwaniem. Czy mógłbym zatem Cię prosić o jakiś artykuł, w którym Twoim zdaniem, powinienem znaleźć odpowiedź na moje pytanie?

1

@Jagielon w takim razie jeśli jest to Twój pierwszy język to zapoznaj się z książką https://helion.pl/ksiazki/jezyk-ansi-c-programowanie-wydanie-ii-brian-w-kernighan-dennis-m-ritchie,jansiv.htm#format/d Klasyczna pozycja prosto wprowadzająca i opisująca programowanie w czystym C.

Co do pytania o artykuł to tu https://www.thegeekstuff.com/2013/01/c-argc-argv/ tu jest w miarę fajnie opisane jak można obsługiwać parametry.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.