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

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

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

[ Pregleda: 4726 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

tuzlaorg
Istanbul, Turkey

Član broj: 286
Poruke: 285



+1 Profil

icon system() // (C/C++)18.07.2001. u 17:45 - pre 276 meseci
Ovo je radilo u C++-u:
int bar;
system("echo foo " bar " times.");
Ali to ne radi u C-u? jesam li upravu?
 
Odgovor na temu

Vojislav Milunovic

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



+1 Profil

icon Re: system() // (C/C++)18.07.2001. u 18:19 - pre 276 meseci
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]
 
Odgovor na temu

tuzlaorg
Istanbul, Turkey

Član broj: 286
Poruke: 285



+1 Profil

icon Re: system() // (C/C++)18.07.2001. u 23:06 - pre 276 meseci
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
:(
 
Odgovor na temu

Vojislav Milunovic

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



+1 Profil

icon Re: system() // (C/C++)18.07.2001. u 23:17 - pre 276 meseci
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".
 
Odgovor na temu

tuzlaorg
Istanbul, Turkey

Član broj: 286
Poruke: 285



+1 Profil

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

Vojislav Milunovic

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



+1 Profil

icon Re: system() // (C/C++)19.07.2001. u 11:10 - pre 276 meseci
Nemozes tako da ubacujes broj u string tipa :

"bvlalaldasda" broj "dfsdasdadasdada";

Moras sa sprintf i ili strcat to da sredis
 
Odgovor na temu

slash

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



Profil

icon Re: system() // (C/C++)19.07.2001. u 12:06 - pre 276 meseci
Citat:
predator je napisao:
Nemozes 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 - [email protected]
 
Odgovor na temu

slash

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



Profil

icon Re: system() // (C/C++)19.07.2001. u 12:06 - pre 276 meseci
Citat:
predator je napisao:
Nemozes 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 - [email protected]
 
Odgovor na temu

kajla
Milorad Janković
Beograd

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



+2 Profil

icon Re: system() // (C/C++)19.07.2001. u 13:24 - pre 276 meseci
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.
 
Odgovor na temu

kajla
Milorad Janković
Beograd

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



+2 Profil

icon Re: system() // (C/C++)19.07.2001. u 13:33 - pre 276 meseci
Citat:
slash je napisao:
Citat:
predator je napisao:
Nemozes 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.
 
Odgovor na temu

slash

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



Profil

icon Re: system() // (C/C++)19.07.2001. u 13:37 - pre 276 meseci
Citat:
kajla je napisao:
Citat:
slash je napisao:
Citat:
predator je napisao:
Nemozes 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 - [email protected]
 
Odgovor na temu

tuzlaorg
Istanbul, Turkey

Član broj: 286
Poruke: 285



+1 Profil

icon Re: system() // (C/C++)20.07.2001. u 07:08 - pre 276 meseci
LOL, pitanje je bilo sta je sa :) system; ne treba mi sprintf :)
Hvala :)
 
Odgovor na temu

kajla
Milorad Janković
Beograd

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



+2 Profil

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


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

poz.
 
Odgovor na temu

tuzlaorg
Istanbul, Turkey

Član broj: 286
Poruke: 285



+1 Profil

icon Re: system() // (C/C++)21.07.2001. u 02:26 - pre 276 meseci
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
 
Odgovor na temu

overdose

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



Profil

icon Re: system() // (C/C++)16.11.2004. u 15:02 - pre 235 meseci
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
 
Odgovor na temu

yooyo

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



Profil

icon Re: system() // (C/C++)16.11.2004. u 16:12 - pre 235 meseci
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
 
Odgovor na temu

overdose

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



Profil

icon Re: system() // (C/C++)16.11.2004. u 17:56 - pre 235 meseci
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 :)
 
Odgovor na temu

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

[ Pregleda: 4726 | Odgovora: 16 ] > FB > Twit

Postavi temu Odgovori

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