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