Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Co oznacza: int main( int argc, char * argv[] )

Ostatnio zmodyfikowano 2015-04-11 07:18
Autor Wiadomość
tirou
Temat założony przez niniejszego użytkownika
Co oznacza: int main( int argc, char * argv[] )
» 2012-09-10 23:05:00
W wielu książkach i nawet tutaj na forum widze pewien fragment kodu, którego znaczenia nie rozumiem.

Otóż:
int main( int argc, char * argv[] )

CO oznacza ten fragment w argumentach main ? I do czego on służy ?
P-64775
jsc
» 2012-09-11 00:00:56
Wewnątrz nawiasu okrągłego są dane tablicy parametrów:
argc - to liczba argumentów
char * argv[] - zawiera ścieżkę wywołania i parametry podane wraz z jego parametrami.
P-64777
kubawal
» 2012-09-11 08:05:01
@jsc
parametry podane wraz z jego parametrami
 ????

To
char * argv[]
 oznacza tyle samo co
char ** argv
, co oznacza tablicę tablic(łańcuchów) typu char
P-64781
xevuel
» 2012-09-11 08:09:14
Jeśli z konsoli wywołasz przykładowo:
twoj_program -o file.txt 1094 45

To argc == 5, argv[0] == "twoj_program", argv[1] == "-o", argv[2] == "file.txt", argv[3] == "1094", argv[4] == "45".
P-64782
kubawal
» 2012-09-11 08:13:42
Jeszcze jeśli w konsoli dasz
program text "to jest tekst"
, to argc = 3, argv[0] == "program", argv[1] == "text" i argv[2] == "to jest tekst"
P-64783
tirou
Temat założony przez niniejszego użytkownika
» 2012-09-12 11:53:44
Nie za bardzo rozumiem z tymi wywołaniami (być może dlatego, że panowie wywolujecie program w konsoli na linuksie), ale zadam pytanie, czy to jest czasem zbędne? Jeżeli funkcja main będzie z nieokreslonymi akgumentami
int main()
 czy coś trace?

Edit/

twoj_program -o file.txt 1094 45

To argc == 5, argv[0] == "twoj_program", argv[1] == "-o", argv[2] == "file.txt", argv[3] == "1094", argv[4] == "45".

Tu chodzi o to, że mój program będzie miał 5 argumentów, program o nazwie
twoj_program
, "-o" argumentu owego nie rozumiem,
file.txt.
 tzn że moj program bedzie korzystał z odrebnego pliku "file.txt"? argv[3] i argv[45] nie wiem z czym to powiazac.

Mniej więcej o to chodzi ?
P-64822
pekfos
» 2012-09-12 12:32:09
Tu chodzi o to, że mój program będzie miał 5 argumentów, program o nazwie
twoj_program
, "-o" argumentu owego nie rozumiem,
file.txt.
 tzn że moj program bedzie korzystał z odrebnego pliku "file.txt"? argv[3] i argv[45] nie wiem z czym to powiazac.
Z niczym nie wiązać. Wyłącznie od kodu programu zależy, co będą oznaczać parametry wywołania.
C/C++
int main( int argc, char ** argv )
{
}
Ten program nic nie robi. Niezależnie od tego, co mu podasz podczas wywołania.
C/C++
int main( int argc, char ** argv )
{
    if( !strcmp( argv[ 1 ], "--help" ) )
    {
        printf( "pomoc programu, bla bla bla" );
    }
    else if(..)
    // ...
         else printf( "Wywolaj \"Program --help\" aby otrzymac pomoc." );
   
}
A tu taki przykład..
P-64826
xevuel
» 2012-09-12 15:35:49
panowie wywolujecie program w konsoli na linuksie
Ależ nie :) Zwykły, windowsowy cmd.

czy to jest czasem zbędne
Zależy od specyfiki programu.

Co do kodu @pekfosa - czasem wywołuje się również taką wersję:
C/C++
int main( int argc, char ** argv )
{
    if( !strcmp( argv[ 1 ], "--help" ) )
    {
        printf( "pomoc programu, bla bla bla" );
    }
    else if(..)
    // ...
         else printf( "Wywolaj \"%s --help\" aby otrzymac pomoc.", argv[ 0 ] );
   
}
aby aktualna nazwa pozostała niezależnie od nazwy pliku wykonywalnego.

Jeszcze jeden, konkretny przykład (na IrfanView) - po otworzeniu cmd i wpisaniu
i_view32.exe
 otworzy Ci się okno programu, i nie zostanie poza tym wykonana żadna czynność. Wpisanie
i_view32.exe obraz1.bmp /convert=obraz2.png /transpcolor=(10, 10, 10)
 nie spowoduje otwarcia okna, ale przekonwertuje plik obraz1.bmp na obraz2.png. Po prostu program w zależności od przekazanych mu parametrów MOŻE wykonać inną czynność niż standardowa/domyślna.

@down: To nie jest mój kod, tylko kod pekfosa z modyfikacją polegającą na wstawieniu aktualnej nazwy exeka, a nie tej stworzonej przez stwórcę.
P-64829
« 1 » 2
  Strona 1 z 2 Następna strona