Czy dobrze rozumiem int argc string argv[]?

Czy dobrze rozumiem int argc string argv[]?
JA
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:6
0

Witajcie,
oto mój kod:

Kopiuj
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.

Kopiuj
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:

Kopiuj
 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ć:

Kopiuj
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

Patryk27
Moderator
  • Rejestracja:ponad 17 lat
  • Ostatnio:prawie 2 lata
  • Lokalizacja:Wrocław
  • Postów:13042
0

Czym jest string?


Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 17 godzin
  • Postów:1607
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.

edytowany 2x, ostatnio: Althorion
AK
Przeredaguj ten post. CString to nazwa względnie popularnej klasy. Może w pisowni C-string ?
Althorion
Mhm, ma sens, dzięki za poprawkę.
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
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


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 1x, ostatnio: AnyKtokolwiek
JA
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:6
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?

edytowany 1x, ostatnio: Jagielon
MY
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 18 godzin
  • Postów:1083
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.