Hirdetés

Új hozzászólás Aktív témák

  • CPT.Pirk
    Jómunkásember

    1. A programokat az operációs rendszer indítja, tipikusan másik programok kérésére. A main függvény argv/argc paraméterei a c/c++ nyelv szabványosított formája a program argumentumok kezelésére (mármint nem a nevükre gondolok itt, mert az ugye bármi lehet). Az argumentumokra általában nincs olyan megkötés, hogy nem tartalmazhatnak szóközt. Ha tehát a hívó program beleteszi őket, akkor te meg is fogod kapni. Vagyis csak az a kérdés, hogy a hívó programot hogy veszed rá erre. Windowson a hívó például lehet a parancsablak, a cmd.exe. Ezesetben értelemszerűen idézőjeleket használva valószínűleg jó lesz. Továbbá, ha nem platformfüggetlen kódot írsz, akkor windowson egyben is lekérheted az egész parancssort, a GetCommandLine függvénnyel (bár nem tudom a szóközökkel ezesetben mi lesz).

    2. Az argv továbbadása. Az argv nem valami mágikus paraméter, csak egy sima string tömb. Mint ilyen, természetesen akár egészben akár darabokban továbbadhatod másik függvényeknek, pont úgy mint bármilyen más string tömböt. Az argc meg csak egy szerencsétlen int, azzal még ennyi gond sincs.

    Az a gond, hogy az egyszerű dolgokhoz bevált linuxos gcc-s fordítás nem akar menni nálam, vagyis a lefordított fájlt nem engedi futtatni, hozzáférés megtagadva hibát kapok, aztán emelt hozzáféréssel meg valami ) zárójelet hiányol, de nem a programom hibás, mindegy neki h. mit fordítók le, még egy hello wordnél is ez van, így most kénytelen vagyok win alatt csinálni.
    Arra sajnos nem jöttem rá, hogy Linuxon CodeBlocks-al hogyan lehet lefuttatni úgy, hogy kapjon is valami argumentumokat.

    Szóval akkor win alatt egyszerűen a cmd szedi ki a fölösnek ítélt spaceket?

    Átírtam most külön fgv-be a dolgokat, valamint tettem bele vizsgálatot arra, ha nincs argumentum.

    #include <stdio.h>
    int i, j, len = 0;

    int strLen(int argc, char *argv[]){
    for (i = 1; i < argc; i++)
    for (j = 0; argv[i][j]; j++)
    len++;
    if(i==1){
    len = 0;
    }
    else
    len = len + (i-2);
    printf("hossz: %d\n", len);
    return len;
    }

    int main(int argc, char *argv[]){
    strLen(argc, argv);
    return 0;
    }

    warningot nem kaptam, korrekt amit csináltam?

Új hozzászólás Aktív témák