• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C] Crash programu zamiast wypisania komunikat o braku parametrów

42 Warsaw Coding Academy
0 głosów
141 wizyt
pytanie zadane 5 maja 2016 w C i C++ przez programmero Bywalec (2,420 p.)

Elo koderzy.

Słuchajcie bawię się parametrami a dokładniej tak zwanymi przełącznikami -opcja itp. W końcu wypadałoby zabezpieczyć program przed błędnym uruchomieniem (uruchamiany jest tradycyjnie, z konsoli w stylu program.exe -a 1 -b 2) gdzie -a oraz -b to przełączniki po których występują argumenty.

W skrócie wszystko napisałem prawidłowo ale jest jedno "ale"..... ;) Jak uruchomię program w ten sposób program.exe to tradycyjnie pojawia się komunikat "program przestał działać". Jak sobie z tym poradzić aby zamiast tego pojawił się komunikat o błędzie?

Zamieszczam ogólną ideę

/* biblioteka do obslugi parametrow */
#include <unistd.h>

int main(int argc, char *argv[])
{
    char opcja;

    /* pobieram parametry wywolania programu */
    while((opcja = getopt(argc, argv, "a:b:")) != -1)
        switch(opcja)
        {
            case 'a':
                /* ... */
                break;
            case 'b':
                /* ... */
                break;
            default:
                fprintf(stderr, "zle parametry\n");
                return 1;
        }
    argc -= optind;
    argv += optind;

    /* ... */
    return 0;
}

 

2 odpowiedzi

0 głosów
odpowiedź 5 maja 2016 przez Patrycjerz Mędrzec (192,320 p.)

Dzieje się tak, ponieważ twój program nie czeka na użytkownika po wyświetleniu komunikatu, lecz od razu się wyłącza, zwracając liczbę 1 (zapewne ta wartość powoduje odpowiedni alert systemowy o błędzie).

komentarz 5 maja 2016 przez niezalogowany
Przecież nie musi czekać bo użytkownik przekazuje dane przy uruchomieniu programu
0 głosów
odpowiedź 6 maja 2016 przez maly Nałogowiec (37,190 p.)

optind to int więc jaki sens ma to:

argv += optind;

https://www.gnu.org/software/libc/manual/html_node/Getopt.html

Podobne pytania

0 głosów
1 odpowiedź 356 wizyt
0 głosów
2 odpowiedzi 769 wizyt
pytanie zadane 28 października 2020 w JavaScript przez Wiciorny Ekspert (280,610 p.)
0 głosów
1 odpowiedź 168 wizyt
pytanie zadane 25 grudnia 2016 w C i C++ przez programmero Bywalec (2,420 p.)

93,377 zapytań

142,379 odpowiedzi

322,527 komentarzy

62,724 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...