[ Vojislav Milunovic @ 19.06.2001. 00:44 ] @
Naime vise puta sam pokusao da dam pametan odgovor na neko pitanje tamo :
recimo pitanje je bilo koje jos funkcije sem strcpy() i strcat() covek moze da kosristi za spajanje stringova.Normalno niko se ne potrudi da mu ponudi najlakse resenje osim mene ciji post nikad nije video svetlo dana?


A post je glasio :
==================================
Mozes da koristis sprintf() i snprinf():

int main(){
char *str1="knowledge",str2="is",str3="power";
char buf[1024];
sprintf(buf,"%s %s %s",str1,str2,str3);
printf("%s\n",buf);
}
==================================

Ne znam da li se gospodin Acim inace moderato ljuti na nas clanove es.org pa ignorise sve pametno sto postuju ljudi koji vise po CEO dan na es.org ...
jednom recju strasno

ili pak ne zeli da ljudi imaju lepo sredjen kod vec uziva da posmatra kako nekome program popija SIGSEGV usled nekontolisanog koriscenja strcat i strcpy

jednostavno secam se kad sam ja pravio sa strcpy i strcat string za kopiranje filova...smrt i kad sam kasnije shvatio kako lepo radi sprintf() (pronasao tu fju) odma mi je pao kamen sa srca.

toliko od mene

[Ovu poruku je menjao predator dana 06-18-2001 u 11:46 PM GMT]
[ mpuzovic @ 19.06.2001. 12:16 ] @
Prvo: Acim nije moderator foruma C/C++ vec moja maleknost!
Drugo: Tvoju poruku nikad nisam video, tako da bih ja trebalo tebe da pitam da li si je ti uopste poslao. Da si je poslao, sigurno bi je razmotrio i odobrio.

Zamolio bih tebe, kao i ostale ljude sa ovoga foruma, da ako imaju neke probleme oko rada drugih web sajtova ili foruma, to ne salju na ovu listu i da pricaju autoru iza ledja. Znam da je to veoma popularna srpska disciplina, ali zar nije bolje da posaljete feedback autoru i da ga pitate u vezi problema. Barem se tako radi u svakom normalnom svetu.

Zeleo bih da prokomentarisem tvoj odgovor takodje. Ako si ti dobar programer onda ti sigurno nece biti problem da predvidis svaku gresku. Tvoj odgovor je mozda dobar za nekih 10 stringova, a sta ako imas 1000 ili 10000...0000. Zamisli da 10^n puta treba da kucas %s ? Zar nije bolja ideja da napravis rekurzivnu funkciju koja kao argumenat uzima funkcija strcpy i taj problem resava u jednoj liniji koda. Iako imas samo pet stringova da spojis opet je bolje da napises tu funkciju jer ces nauciti kako to da implementiras kada budes imao gomilu tekstualnih fajlova gde iz svakog treba da uzmes neparni string i da spojis sa svakim parnim tekstualnim dokumentom.

Jos jednom bih vas zamolio da ne pricate ljudima iza ledja jer je mnogo bolje da njim se direktno obratite i da njim kazete problem. To je mnogo bolje jer cete biti respektovani od tog autora, a ovako kao kada se babe skupe na kafu i ogovaraju komsinicu.
[ m r v a @ 19.06.2001. 14:16 ] @
pih, taj forum na linux.co.yu je stvarno srednje ocajan, barem zbog tog "heavy" moderisanja ....
neam pojma, kad sam pokusao da postujem reply na "Mreze" forumu ...provalih ....
postovi su bili ok, trudio sam se da pisem citko, i bez gresaka, L;)) ali ipak poruke se nisu pojavile na board-u ... tako da sam reko zajebi postovanje, i samo ponekad citam .... jer tamo stvarno ima OK ljudi koji pisu, i tome skidam kapu.

A to sto mi ovde "pisemo iza ledja" autorima je upravo zbog te "netrpeljivosti" koja vlada izmedju izveznih ljudi sa linux.co.yu i es.org i zbog toga sto na linux.co.yu forumima ne moze da prodje nesto sto moderatorima nije po volji, a ovde moze !!!

Dodjite ovamo, malo pratite teme, pa nece biti nista "iza ledja" ili sta ste vec utripovali ....

PS:
Gosti: 5
Registrovani: .... ...... ovako je uvek preko dana ...ponekad i vise gostiju ima .. tako da ono, nemojte da ignorisete ovu konf-u l;))

[ Vojislav Milunovic @ 19.06.2001. 16:58 ] @
Hmmm pa bas da je iza ledja i ne bih se slozio :
1. Vec sam Acimu pisao na ovu temu(zasto neke potove ne pusta ali izgleda da sam pisao na pogresnu adresu)
2. Nemoguce da post nije stigo jer ja sam ga 3 (tri) puta poslao

3. Kad dodjem u neko iskusenje i vidim da ono sto radim nije dobro uradjeno trazim drugi nacin.
Ako ne moze snprintf() da mi odradi posao koristicu strncpy() i strncat() ... ali TO SAMO kad mi code to zahteva a ne uvek.Uzgred sprintf() takodje moze da koristi i za konvertovanje brojeva u string sto nekad moze da bude vise nego korisno.

4. Sto kaze mrva duga je to prica u koju mozda nisi a mozda i jesi upucen
[ mpuzovic @ 19.06.2001. 17:19 ] @
Citat:
predator je napisao:
2. Nemoguce da post nije stigo jer ja sam ga 3 (tri) puta poslao

Kao sto sam vec rekao, ja stvarno tvoj post nisam video, tako da on i nije bio uzet u razmatranje (jer naravno nije ni postojao).
Citat:

Ako ne moze snprintf() da mi odradi posao koristicu strncpy() i strncat() ... ali TO SAMO kad mi code to zahteva a ne uvek.Uzgred sprintf() takodje moze da koristi i za konvertovanje brojeva u string sto nekad moze da bude vise nego korisno.

Te visefukcinalne funkcije kao sto su sprintf(), scanf() i ostali bakraci, barem po meni ne daju punu kontrolu programeru, tako da nisi u mogucnosti da kontrolises program kako ti hoces. Mozda to nema nekih efekata u manjim programima (ko jos pise manje programe ?), ali kada se radi neka (sistemska) aplikacija, onda dolazi do velikih problema. Zato scanf() predstavlja smrt :). Zamisli da kada sa scanfom() uzimas neki string koji predstavlja broj sa ulaza, onda radis scanf("%d", &broj). Posto svaku ulaz predstavlja nisku znakova, scanf to automatski konvertuje u broj, i samim tim ti gubis kontrolu nad programom :(. C ili C++ je veoma cudan jezik :), ali veoma mocan sa druge strane.
[ Vojislav Milunovic @ 19.06.2001. 17:46 ] @
Onda jedino sto mi pada napamet je da taj cgi,php ili sta je vec zaduzeno za prijem poruke koristi neku proveru da li je klijent IE ili Netscape,Opera ili sta vec pa ako nije nesto od toga da skartira sav upit. (posto idem preko lokalnog proxy-a koji ima podeseno da fakuje ime browsear ;o( )


Ja licno se oslanjam na argumente komandne linije a ne na input putem scanf,fscanf , gets ...
Ono sto je lepo uradjeno u C++ je obejakat cin koji prima i konvertuje lepo input u ono sto tebi treba..
Ako mi bas zatreba input onda koristim fscanf() i taj buffer sa strtoul konvertujem u broj.
[ mpuzovic @ 19.06.2001. 19:34 ] @
Citat:
predator je napisao:
Onda jedino sto mi pada napamet je da taj cgi,php ili sta je vec zaduzeno

Posto forum radi koristeci www.phorum.org, tamo bi mogao da nadjes odgovor na tvoje pitanje.

Citat:

Ja licno se oslanjam na argumente komandne linije a ne na input putem scanf,fscanf , gets ...

Opet zavisi od ukusa, kao i od toga sta treba da radi aplikacija. Ako aplikacija sluzi za vodjenje knjigovodstva, onda ces morati da koristis ncurses biblioteku da racunarski nepismenom clerku objasnis sta i gde treba da unese, a ne da mu kazes 'pozovi program i kao argumente kucaj sifru rada i inicijale proizvodjaca i dobices listu za maj mesec'. Nemas pojma koliko racunarski neobrazovanih i nepismenih ljudi vodi knjige.
Citat:

Ono sto je lepo uradjeno u C++ je obejakat cin koji prima i konvertuje lepo input u ono sto tebi treba..

To isto radi i scanf funkcija u Cu, zar ne ? Ipak mnogo je bolje kada u svojim programima koristis sam osnovne funkcija (subset) od celog Ca, jer ce programi biti em mnogo efikasniji em brzo prosivljivi :)
[ Vojislav Milunovic @ 19.06.2001. 23:38 ] @
Pa da slazem se potpuno sa tim da dosta ljudi nepismenih za kompjutore koristi kompjuter za knjigovodstvo (imam druga koji reze muziku na diskove mp3/audio a ne zna da kopira obican file)
Ali jednostavno sad radim za sebe i za svoju dusu.Kad dodje vreme da se od C zivi e tada se mozda bacim na ncurses i ostalo ;o)

Ja se uglavno i samo oslanjam na UNIX syscall-ove .
[ tOwk @ 20.06.2001. 08:16 ] @
Kako su se momčad dala na raspravu...

Moraću samo da vas zamolim da ne koristite više nijednu funkciju ANSI C-a, pošto to može narušiti to kakvu kontrolu imate nad programom. Koristite SUID root, i napravite i funkcije za čitanje sa tastature, ispisivanje na ekran (ne verujem ja onim STDIN, STDOUT, i kojekakvim STDERR). Naravno, koristite ncurses za organizaciju interfejsa pošto to daje najveću i najbolju kontrolu. Najvažnije je imati punu kontrolu nad unosom brojeva, pustite vi i exceptions i sve ostale gluposti, to je slučajno i potpuno bespotrebno ugrađeno i u same procesore.

Kad se već govori o kontroli, bolje je da se pogleda source kod sprintf funkcije pa da se vidi na kom principu radi, i sve će onda biti jasno. Tako i za scanf(). Ta funkcija je dovoljna samo celom svetu, međutim Vašem cenjenom korisniku nikako. Nema se potpuna kontrola, potpuno transparentno će scanf() reagovati ukoliko se unese pogrešan podatak, neće čak ni primetiti.

Ukoliko ćemo da izmišljamo toplu vodu, onda idemo do kraja. Ne treba da kritikujete bilo koju funkciju iz ANSI C standarda, zna se da je on glupost i da nema smisla. Ipak je Meine C Standard najvažniji na svetu, i uskoro će svi početi da ga koriste.

Bolje je naučiti koristiti nešto, nego pričati kako nešto ne može da uradi.

Toliko.
[ Vojislav Milunovic @ 20.06.2001. 10:21 ] @
Pa ja sa potpuno slazem sa onim : Ako je nesto valjalo vec 20 godina i niko ga nije popravljao ili ga je tokom tih 20-30 godina to usavrsavao sto bi ja sad nesto menjao.

Ali mozda smo pricali o tome da sve u C mozes sam.Tu se valjda razlikuje programer klasican od onoga koji pise fje za druge(optimizuje C funkcije) ili recimo os.

Ja se drzim C standarda printf koristim za izlaz i to je to.Jel printf mi lepo formatira izlaz i stampa na file descriptor 1 sto bi bilo ekvivalentno sa kodom :
Code:

/* sredi string */
write(1,string,strlen(string));


Kao sto sam vec rekao kad naidjem na problem uvek trazim nacin da taj problem resim na najlaksi moguci nacin.Bilo to izmisljanje tople vode (jednom sam morao da preradim strstr da kad naidje na \0 nastavi potragu za stringom u nekom bufferu koje odredjenje duzine) ili koriscenje standardnih funkcija ili syscall-ova UNIX systema direktno

Ako si mozda video moj progy sa primerom kako remote uraditi format string bug u samom "exploit" ces SIGURNO primetiti gomilu gluposti u kodu koje nemaju veze sa vezom ali poenta je to program radi.Poenta celog koda je :
Code:

if ( tmpi < tmpi2 ){
  tmpi+=0x10000;
  tmpi-=tmpi2;
}else{
  tmpi-=tmp2;
}


tako je nesto isao kod e sad bez komentara da me ubijes ako bi neko razumeo sta je tmpi i tmpi2 ... kazem ti totalno necitak kod.
[ leka @ 08.07.2001. 12:16 ] @
Ima mnogo raznih "disciplina" mpuzovic-u, a jedna od veoma popularnih srpskih disciplina, kako ste Vi u jednom od prethodnih postova, rekli, jeste pljuvanje EliteSecurity-a, i "nazovi hakera, klinaca i neozbiljnog sveta koji se okupio na EliteSecurity".

Ovo se moze i dokazati, tako da bilo kakva polemika oko ovoga sto sam rekao u prethodnom paragrafu ne bi imala smisla...

Druga popularna srpska disciplina je pljuvanje konkurencije (uopste) ma kako ona bila fer - i za ovo postoje veoma cvrsti dokazi - i to iza ledja. E sada, postoji jedno pitanje - ako neko nekom pljuje iza ledja, da li ovaj treba da cuti ili da radi isto to?

Ali ako zelite da odgovorite na ovo sto sam poslao, predlazem da odemo na neki drugi forum (ne C/C++ forum)...

S postovanjem,

Deyan

[ BORG @ 08.07.2001. 23:14 ] @
Primjetio sam da momke na ovome forumu bas i nevole.
Neznam koji je razlog toga...svi misle da smo neki wannabe hackeri i tako ta sranja.Neznam sta se to dogadja !
Svidja mi se ovde,mogu postaviti neko pitanje i znam da ce neko odgovoriti.I svidja mi se drustvo,svi su ljubazni i dobri momci ne znam sta oni svi misle sto pljuju po nama !

[ stinger @ 09.07.2001. 10:34 ] @
Citat:
BORG je napisao:
Primjetio sam da momke na ovome forumu bas i nevole.
Neznam koji je razlog toga...svi misle da smo neki wannabe hackeri i tako ta sranja.Neznam sta se to dogadja !
Svidja mi se ovde,mogu postaviti neko pitanje i znam da ce neko odgovoriti.I svidja mi se drustvo,svi su ljubazni i dobri momci ne znam sta oni svi misle sto pljuju po nama !




ma ljubomorni ljudi bre...