[ glupi @ 12.01.2003. 21:20 ] @
Imam 2 pitanja:
1. Trebam pokrenut program iz svog programa te mu prosljedit neke argumente, do sada sam to radio preko execle() funkcije, ali sada vise nemogu tako prosljedit argumente jer program sada prvo trebam pokrenut te on poziva gets() funkciju??

2. Naisao sam na ovaj kod te mi nije jasno kako "zadovoljit" if naredbu (kakav mi treba biti argument da bi proslo)?
char *p;
if( p == (char *) strchr(argv[1],'@') ) p++;

hvala
[ bokash @ 13.01.2003. 02:35 ] @
1. mozda pomogne ShellExecute ( samo to je za win).
2. kolko ja videh ovomu dodje 64 decimalno ili 0x40 hex.
samo mi nije jasno kastovanje u char* ako strchr()
vraca char* ?
[ tOwk @ 14.01.2003. 17:00 ] @
Citat:
glupi:
Imam 2 pitanja:
1. Trebam pokrenut program iz svog programa te mu prosljedit neke argumente, do sada sam to radio preko execle() funkcije, ali sada vise nemogu tako prosljedit argumente jer program sada prvo trebam pokrenut te on poziva gets() funkciju??

system()?

Citat:

2. Naisao sam na ovaj kod te mi nije jasno kako "zadovoljit" if naredbu (kakav mi treba biti argument da bi proslo)?
char *p;
if( p == (char *) strchr(argv[1],'@') ) p++;


Nedovoljno konteksta da bi se išta moglo reći: kod je vrlo čudan, a ono što on radi je da traži '@' u prvom argumentu, ukoliko ga nađe proverava da li je p već sada pokazivač na taj znak u argv[1], a ako ga ne nađe proverava da li je p==NULL, i zatim uvećava p za 1.

Ukoliko se umesto ,,=='' stavi ,,='' , onda će kod raditi nešto zanimljivije: tražiće znak '@' i pokazivač postaviti na jedno mesto iza: vrlo korisno ako ti treba, npr. domen iz e-mail adrese.

Jedini je problem što ako se '@' ne pojavljuje u prvom argumentu, eto tebi ubrzo jedan ,,SIGSEGV'', pošto na adresi (char*)1 ne verujem da ti je dozvoljen pristup svuda osim u DOS-u :)
[ glupi @ 16.01.2003. 20:48 ] @
evo ovo je cijeli kod programa:
int main(int argc,char **argv)
{
char buf[256], *p;

if(argc < 2)
{
printf("Usage: %s buffer\n",argv[0]);
exit(-1);
}

if(p == (char *)strchr(argv[1],'@')) p++;
else
{
printf("Bad buffer\n");
exit(-1);
}
strcpy(buf,p);
}
[ tOwk @ 16.01.2003. 22:45 ] @
Taj kod, kratko rečeno ne valja.

Naime, p nije dodeljena vrednost, i zato može biti proizvoljno (tj. ne znamo šta je).

Zatim se poredi ta ,,slučajna'' vrednost p i pokazivač na '@' u prvom argumentu (NULL ako ga nema). Šanse da se ovaj uslov zadovolji su veoma male u ovom programu, i ne mogu se unapred predvideti.

Najverovatnije treba '==' zameniti u tom if-u sa '=', a onda će kod pronalaziti sve posle prvog '@' u prvom argumentu (npr. ako se prosledi kao prvi argument '[email protected]', onda će p pokazivati na deo 'elitesecurity.org').

Dodati else rešava onaj problem koji sam pomenuo u prethodnoj poruci (ako je p=NULL, onda se ne upotrebljava).

Na kraju se samo kopira ovo p u buf.

Mada sam sve ovo isto rekao i u prethodnoj poruci, možda je sada jasnije?
[ glupi @ 17.01.2003. 22:30 ] @
hvala na odgovoru, onaj kod mi je bio zadan, moguce da je greska