Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

system() // (C/C++)

[es] :: C++ programiranje :: system() // (C/C++)

[ Pregleda: 2297 | Odgovora: 16 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tuzlaorg

Član broj: 286
Poruke: 285
*.dsl.mindspring.com

Sajt: www.tuzlaorg.com


Profil

icon system() // (C/C++)18.07.2001. u 17:45

Ovo je radilo u C++-u:
int bar;
system("echo foo " bar " times.");
Ali to ne radi u C-u? jesam li upravu?
Friends don`t let friends do FAT! Friends let friends do ext3 :)
18.07.2001. u 17:45 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

Član broj: 25
Poruke: 2117
*.verat.net

Sajt: nonenone.net


Profil

icon Re: system() // (C/C++)18.07.2001. u 18:19
hmmm ne znam kako mislis da ne radi. (posto forum izbaci \ predpostavljam da je \ bilo idpred " koje okruzuju bar.
Drugim recima ovaj program bi trebalo samo da uradi ovo:
Code:

#echo foo "bar" times
foo bar times
#


Uzgred uvek napisi sta ocekujes program da radi.Ja predpostavljam da treba samo da ostampa ovaj string na ekran.

// edit filmil: zatvoren code tag

[Ovu poruku je menjao filmil dana 16.11.2004. u 22:44 GMT+1]
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
18.07.2001. u 18:19 

tuzlaorg

Član broj: 286
Poruke: 285
*.dsl.mindspring.com

Sajt: www.tuzlaorg.com


Profil

icon Re: system() // (C/C++)18.07.2001. u 23:06
Okej;
Ovaj kod bi trebo da ispise integer u systemu
int bar;
bar=0;
system("echo times" bar " times ");

a rezultat bi bio (makar u C++u je)
echo times 0 times
:(

Friends don`t let friends do FAT! Friends let friends do ext3 :)
18.07.2001. u 23:06 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

Član broj: 25
Poruke: 2117
*.verat.net

Sajt: nonenone.net


Profil

icon Re: system() // (C/C++)18.07.2001. u 23:17
Nema sanse da je ovako nesto radilo sa C++.Jednostavno ovo nije sintaksa C/C++ jezika.Da bi nesto ovako radilo moras sa strcat ili sprintf da napravis prvo string "echo foo 0 times".
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
18.07.2001. u 23:17 

tuzlaorg

Član broj: 286
Poruke: 285
*.dsl.mindspring.com

Sajt: www.tuzlaorg.com


Profil

icon Re: system() // (C/C++)19.07.2001. u 06:30
a kako ;
:)
bil moglo ako stavis
#define fool da radi?
kod mene je radilo
pazi na www.xtcnet.net/~tuzlaorg/ugcounter1.2.1

Friends don`t let friends do FAT! Friends let friends do ext3 :)
19.07.2001. u 06:30 

Vojislav Milunovic
tata i mama me izdržavaju
Beograd, Srbija

Član broj: 25
Poruke: 2117
*.verat.net

Sajt: nonenone.net


Profil

icon Re: system() // (C/C++)19.07.2001. u 11:10
ne mozes tako da ubacujes broj u string tipa :

"bvlalaldasda" broj "dfsdasdadasdada";

Moras sa sprintf i ili strcat to da sredis
Oni ostali, ja se raspao...
četničke pesme
get out of ma way you bi***...
Ne čitam pp, ako nekom trebam ima mail : chetnik(na)atlas(tačka)cz
19.07.2001. u 11:10 

slash

Član broj: 538
Poruke: 38
*.iskon.hr



Profil

icon Re: system() // (C/C++)19.07.2001. u 12:06
Citat:
predator je napisao:
ne mozes tako da ubacujes broj u string tipa :

"bvlalaldasda" broj "dfsdasdadasdada";

Moras sa sprintf i ili strcat to da sredis


int broj;
broj = 0;
char *buf;
snprintf (buffer, sizeof(buffer), "blablabla %d blablabla", broj);
system(buffer);


Freelance security consultant -
UNIX Administrator -
www.avalon.hr - slash@avalon.hr
19.07.2001. u 12:06 

slash

Član broj: 538
Poruke: 38
*.iskon.hr



Profil

icon Re: system() // (C/C++)19.07.2001. u 12:06
Citat:
predator je napisao:
ne mozes tako da ubacujes broj u string tipa :

"bvlalaldasda" broj "dfsdasdadasdada";

Moras sa sprintf i ili strcat to da sredis


int broj;
broj = 0;
char *buffer;
snprintf (buffer, sizeof(buffer), "blablabla %d blablabla", broj);
system(buffer);


Freelance security consultant -
UNIX Administrator -
www.avalon.hr - slash@avalon.hr
19.07.2001. u 12:06 

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.InfoSky.Net



Profil

icon Re: system() // (C/C++)19.07.2001. u 13:24
Citat:
tuzlaorg je napisao:
a kako ;
:)
bil moglo ako stavis
#define fool da radi?
kod mene je radilo
pazi na www.xtcnet.net/~tuzlaorg/ugcounter1.2.1


Pazi ovaku u C-u je ok ako napises "Milorad" " je kajla" to ti je isto kao "Milorad je kajla", ili
#define NAME "Milorad"

pa sad:
NAME " je kajla". to je sasvim OK (znaci napises dva konstantna niza karaktera jedan do drugog) ali ne moze "fdfdfd" varijabla "fdfdf", posebno sto je tebi varijabla tip-a int, tako da moras da je konvertojes sa sprintf() ili itoa().

poz.
19.07.2001. u 13:24 

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.InfoSky.Net



Profil

icon Re: system() // (C/C++)19.07.2001. u 13:33
Citat:
slash je napisao:
Citat:
predator je napisao:
ne mozes tako da ubacujes broj u string tipa :

"bvlalaldasda" broj "dfsdasdadasdada";

Moras sa sprintf i ili strcat to da sredis


int broj;
broj = 0;
char *buffer;
snprintf (buffer, sizeof(buffer), "blablabla %d blablabla", broj);
system(buffer);



Pa nisi alocirao memoriju za buffer! sizeof (buffer) ti je 4.

poz.
19.07.2001. u 13:33 

slash

Član broj: 538
Poruke: 38
*.iskon.hr



Profil

icon Re: system() // (C/C++)19.07.2001. u 13:37
Citat:
kajla je napisao:
Citat:
slash je napisao:
Citat:
predator je napisao:
ne mozes tako da ubacujes broj u string tipa :

"bvlalaldasda" broj "dfsdasdadasdada";

Moras sa sprintf i ili strcat to da sredis


int broj;
broj = 0;
char *buffer;
snprintf (buffer, sizeof(buffer), "blablabla %d blablabla", broj);
system(buffer);



Pa nisi alocirao memoriju za buffer! sizeof (buffer) ti je 4.

poz.



oprosti, zurio sam se :) Hvala na ispravci !

Freelance security consultant -
UNIX Administrator -
www.avalon.hr - slash@avalon.hr
19.07.2001. u 13:37 

tuzlaorg

Član broj: 286
Poruke: 285
*.dsl.mindspring.com

Sajt: www.tuzlaorg.com


Profil

icon Re: system() // (C/C++)20.07.2001. u 07:08
LOL, pitanje je bilo sta je sa :) system; ne treba mi sprintf :)
Hvala :)
Friends don`t let friends do FAT! Friends let friends do ext3 :)
20.07.2001. u 07:08 

kajla
Milorad Janković
Beograd

Član broj: 445
Poruke: 909
*.verat.net



Profil

icon Re: system() // (C/C++)20.07.2001. u 11:05
Citat:
tuzlaorg je napisao:
LOL, pitanje je bilo sta je sa :) system; ne treba mi sprintf :)
Hvala :)


Pa onda je odgovor: ne moze SAMO SA system(), mozes koristiti strcat() i strcpy().

poz.
20.07.2001. u 11:05 

tuzlaorg

Član broj: 286
Poruke: 285
*.dsl.mindspring.com

Sajt: www.tuzlaorg.com


Profil

icon Re: system() // (C/C++)21.07.2001. u 02:26
Ma ne, nego svi odjednom pocese prepravljati jedne druge. Uradio sam vec to i uskoro cu da ga posaljem na server. Moram da instaliram debiana na dva servera u kuci pa kad to sredim javicu se :) sa linkom do .c soruca
Friends don`t let friends do FAT! Friends let friends do ext3 :)
21.07.2001. u 02:26 

overdose

Član broj: 33563
Poruke: 51
*.ppp-bg.sezampro.yu.



Profil

icon Re: system() // (C/C++)16.11.2004. u 15:02
Code:

#include <stdio.h>
#include <string.h>
#define N 15

void main () {
  
  int bar;
  printf ("Unesite ceo broj: "); scanf("%d", &bar);
  char komanda1[] = "echo foo ";
  char komanda2[] = " times";
  char komanda3[N];
  sprintf (komanda3, "%d", bar);
  
  strcat (komanda1, komanda3);
  strcat (komanda1, komanda2); 

  
  printf ("\n\033[1;32mtuzlaorg:\033[0m Testiramo da li smo dobili potreban string: "
          "\033[41m\033[1;37m %s \033[0m\n         Sad izvrsavamo tu komandu:\n\n", komanda1);
  
  system (komanda1);
}


Funkcija system očekuje da joj se preda string. To može biti direktno navedeni string ("blah, blah") ili "pravi" string koji je formiran u tom programu (onda se navodi bez navodnika). Kod u tvojoj prvoj poruci nije dobar jer "bar" ne postoji kao string u programu.

Funkcija strcat nadovezuje string na string. Ovde nam je još potrebna funkcija sprintf koja u ovom slučaju vrši konverziju integer-a u char i stavlja ga u string komanda3 (dakle pravi string od integer-a).

Evo jednog praktičnog programčića koji koristi ovo.

Kada treba da se prevede program test.c na unix-u i da se dobije izvršni fajl test treba kucati:

cc test.c -o test

Hvala bogu pa postoji program make koji kada se pokrene (a ne postoji Makefile) radi upravo ovo. Ali zamislimo da on ne postoji. Alias se ne može napraviti jer svaki put prevodimo program koji se drugačije zove ! Evo koda koji radi ovo:

Code:

/* prevedi.c */

#include <stdio.h>
#include <string.h>

void main (int bpar, const char *vpar[]) {

  char komanda1[] = "cc ";
  char komanda2[] = ".c -o ";
  
  strcat (komanda1, vpar[1]);
  strcat (komanda1, komanda2); 
  strcat (komanda1, vpar[1]);
  
  printf ("\n\033[1;32mprevedi:\033[0m Testiramo da li smo dobili potreban string: "
          "\033[41m\033[1;37m %s \033[0m\n         Sad izvrsavamo tu komandu:\n\n", komanda1);
  
  system (komanda1);
}


Sada ako pokrenemo program:

./prevedi test

dobićemo izvršni program test.

Ovde ima samo jedna misteriozna stvar ! Naime, ako je ime c fajla duže od 3 karaktera doći će do segmentation fault-a, ali će i dalje program da odradi posao. Tek kad završi sve onda pukne. Nejasno mi je zašto ?

OvEr
16.11.2004. u 15:02 

yooyo
Centroid / Technical director

Član broj: 4891
Poruke: 1101
*.sbb.co.yu.



Profil

icon Re: system() // (C/C++)16.11.2004. u 16:12
Ja cim vidim coveka znam da li zna da radi sa pointerima :)

Code:

  char komanda1[] = "cc ";
  char komanda2[] = ".c -o ";

  strcat (komanda1, vpar[1]);
  strcat (komanda1, komanda2); 
  strcat (komanda1, vpar[1]);


Za komanda1 je alocirano 4 bajta ("cc "\0). strcat dodaje na kraj od komanda1 vpar[1] i na taj nacin bombardujes memoriju.

Uradi ovako:
Code:

char temp[1024]; // mora biti dovoljno veliko
sprintf(temp, "%s%s%s%s", komanda1, vpar[1], komanda2, vpar[1]);
system(temp);


yooyo
16.11.2004. u 16:12 

overdose

Član broj: 33563
Poruke: 51
*.ppp-bg.sezampro.yu.



Profil

icon Re: system() // (C/C++)16.11.2004. u 17:56
Aha, hvala yooyo !

Mnogo je bolje rešenje sa sprintf.

Zanimaju me još 2 stvari.

1. Zašto onda ovaj kod ima isti problem:

Code:

  char komanda1[1024] = "cc ";
  char komanda2[] = ".c -o ";

  strcat (komanda1, vpar[1]);
  strcat (komanda1, komanda2); 
  strcat (komanda1, vpar[1]);


Kao i zašto se isti problem ne javlja u prvom programu (tuzlaorg problem) ?

2.
Citat:
yooyo: Ja cim vidim coveka znam da li zna da radi sa pointerima :)
16.11.2004. u 17:56 

[es] :: C++ programiranje :: system() // (C/C++)

[ Pregleda: 2297 | Odgovora: 16 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.