Hirdetés

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

  • Jester01
    veterán

    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?

    Ha bővebbet tudnál mutatni a linuxos hibáról akkor abban esetleg tudnánk segíteni.

    Ami a kódot illeti: az i,j,len változókat kirakni globálisba nem szép dolog, tedd őket bele az strLen függvényedbe. Az if (i==1) len=0 felesleges mivel ha nem volt argumentum a len úgyis nulla. Az i-t ellenőrizni pedig megtévesztő, hiszen tulajdonképpen az argc-t akarod vizsgálni (persze az értéke ugyanaz lesz, csak logikailag gubancos).

    Továbbá szebb lenne, ha a kiírás nem az strLen-ben lenne, hanem a main-ben az strLen visszatérési értéke alapján.

    Ha jól értem a logikát, akkor az argumentumok között egy szóközt feltételezve korrigálod a hosszt. Ez ugye addig jó amíg tényleg annyi van. Ha a felhasználó egyetlen argumentummal futtatja akkor nyilván jó eredményt fog adni egyébként.

    $ cat >test.c
    #include <stdio.h>

    int strLen(int argc, char *argv[]) {
    int i, j, len = 0;
    for (i = 1; i < argc; i++)
    for (j = 0; argv[i][j]; j++)
    len++;
    if (argc > 2) len += argc - 2;
    return len;
    }

    int main(int argc, char *argv[]) {
    printf("hossz: %d\n", strLen(argc, argv));
    return 0;
    }
    $ gcc -Wall -O2 test.c
    $ ./a.out hello world
    hossz: 11
    $ ./a.out "hello world"
    hossz: 11
    $ ./a.out hello world
    hossz: 11
    $ ./a.out "hello world"
    hossz: 13

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