Keresés

Aktív témák

  • Miracle

    senior tag

    válasz Jester01 #168 üzenetére

    Mellesleg Miracle kódjával vigyázni kell, mert bár úgy látszik mintha új stringet adna vissza, valójában helyben fordítja meg. Ezzel két baj van: az összes többi helyen, ahol eltároltad a stringre mutató pointert szintén megfordul, illetve nem adhatsz be neki konstans stringet. Ha tehát úgy próbáltad ki pl. hogy megfordit(''abcde'') akkor az bizony segfault, mert a konstans string az nem írható, kivéve, ha erre külön kéred a fordítót (de ne tedd):

    ha C kodot keszitek, akkor igyekszek olyat kesziteni, hogy az szepen simuljon a glibc-be, mert en altalaban ezt a C libet hasznalom. Szoval a fuggvenyem nem veletlenul vagy lustasagbol nem foglal helyet maganak, hanem azert, mert ez igy jobban hasznalhato, es szebben valasztja el a stringfordito viselkedest minden mastol, es igy tobb helyen fel lehet hasznalni, mint egy olyan fuggvenyt, ami maganak allokal teruletet. mindenfele C libek fejlesztoi is kifejezetten ugyelnek arra, hogy csak olyan fv foglaljon teruletet, aminek a funkcioja kifejezetten terulet allokalas, mint pl az atrdup(). persze nehany helyen meg kikerulhetetlen, hogy a lib foglaljon helyet nekunk, mert pl. valamilyen adatstrukturat kell feltoltenie, de ilyenkor a fuggveny definiciojaban szepen leirjakhogyha beleirsz halottvagy, es ami kell azt MASOLD ki, es utana szabaditsd fel az erre szolgalo fv.el. ha en allokalnek helyet, akkor konnyen elofordulhatna ilyen hiba:
    str = megfordit (str); es rogton buktam nehany byteot, ami sosem jo. arrol az aprosagrol ne is beszeljunk hogy din. memoriafoglalas nem annyira gyors, mint inkabb lassu, nem minden rendszeren, es nem minden korulmenyek kozott erheto el, ha mar van 1 giga din.an foglalt memoriad linuxon pl mar konnyen lehet hogy elszall a progi meg ha 4 giga van is a masinaban. szoval egy fuggveny a leheto legkevesebb olyan muveletet vegezzen, aminek esetleg lehetnek mellekhatasai, es a leheto legkevesebb funkcionalitast valositsa meg, ami mar megfelel a specifikacionak. (szerintem)

    u.i. elindexelesert sorry, elofordul nalam :(

  • NikhodemuS

    csendes tag

    válasz Jester01 #176 üzenetére

    koszi. Meg van egy kis hiba a forditva-ban, de azt megoldom. Fo az, hogy a segfaulttol megszabadultam, Koszi, sracok:)

  • NikhodemuS

    csendes tag

    válasz Jester01 #174 üzenetére

    Igy gondoltad?

    char* megfordit(char *str)

    {
    int hossz=0,i = 0;
    char* forditva;
    while( *str++ ) ++hossz;
    printf(''Checkpoint'');getch(); //ezt figyeld!
    forditva=(char*)malloc(hossz+1);
    while(!(str))forditva=str[hossz-i++];
    forditva='\0';
    str=forditva;
    free(forditva);
    return strcpy(str,forditva);

    }
    int main(void)
    {char *sz,*szov; int i=0;

    printf(''kerem a szoveget...'');
    scanf(''%s'',&sz);
    printf(''a szoveg:...%s'',&sz);
    szov=(char*)malloc(strlen(sz));
    printf(''forditva:...%s'',megfordit(szov));
    getch();
    return 0;
    }
    Itt valami nem tiszta...de koszi a joindulatot, remelem sikerul elmagyaraznotok, hol mind hibazok....:F

  • tomcs

    őstag

    válasz Jester01 #171 üzenetére

    azt mondtam en is, de nem irtam be a kodot csak hogy mit kene csinalnia.

    aze nehogyma terjedjen a kopipasztolos programozoi stilus :)

Aktív témák