[ Leticija @ 16.05.2005. 22:43 ] @
Htjela bi poslat jednu poruku frendu, cisto jednostavan program u c-u koji ce mi ispisivat tekst na ekran. Jedan sastavak, tak da mi treba polagano ispisivanje, eventualno slovo po slovo il redak po redak. Nakon izvodenja programa jednom, htjela bi da se pokrene njegovo samounistenje. (Ne zelim da mu taj tekst ostane na compu u bilo kojem obliku!!!) Razgovarala sam s frendom i reko mi je da postoji neka naredba za brisanje programa, al da moram znat tocnu lokaciju di ce on bit spremljen.
ANY HELP?
[ sekretar SkOJ-a @ 17.05.2005. 00:20 ] @
Pazi, generalno, postoji naredba za brisanje obracanjem OS-u, moras koristiti stdlib.h i kucas system("del <lokacija na hard disku>";

Medjutim kod tebe je problem sto dok tvoj program izvrsava tu naredbu, on radi, a nije moguce brisati program koji se koristi!!
Zato ti preporucujem da napravis dodatni program koji bi pozivao tvoj program sa porukom, a cim se zavrsi njegovo izvrsavanje pozivao batch fajl za brisanje prethodnog programa. Tvoj korsnik bi naravno otvarao taj dodatni program.
Taj dodatni program bi mogao ovako da izgleda (mrzelo me je da kompajliram, pa mozda ima gresaka):

#include <stdio.h>
#include <iostream> /* ako radis iz c++ */
#include <stdlib.h>
int main()
{
system("<ime programa za poruku.exe>"); /*ako su u istom folderu */
system("del <lokacija programa sa porukom>);

return 0;
}

Tako ce nakon prvog izvrsavanja dodatnog programa, njemu ostati da ovih par linija koda, a kad ga sledeci put pokrene dobice poruku o gresci jer nema ovog programa sa porukom
Pretpostavljam da program sa porukom znas sama da napises, tako da ti tu ne treba pomoc.
Ne znam da li si na ovo mislila, ali se nadam da sam pomogao...
[ Mihajlo Cvetanović @ 17.05.2005. 09:12 ] @
Aplikaciji nije moguce da sama sebe obrise, ali batch fajlu jeste. Zato

na kraju izvrsenja aplikacije napravi .bat fajl koji ce u petlji brisati

aplikaciju sve dok ne uspe, i na kraju obrisati i sebe (sa "del %0").

Pokreni .bat fajl, izadji iz aplikacije, i sve ce biti obrisano.
[ rumpl @ 17.05.2005. 11:24 ] @
Mozes ti da izbises tvoj program, ali tekst ce jos uvek ostati na ekranu, nista lakse od jednog copy/paste-a...

Treba i o tome malo da porazmislis...
[ BIG FOOT @ 26.06.2005. 05:24 ] @
Da ne otvaram novu temu:
Da li je iz, iz ugla memorijske i vremense racionalnosti, isto ako niz
deklarisemo kao a[], a[100] i *a

Nov sam u C-u, ali mi ovo izgleda kao ne-ekvivalentno.

BF
[ z@re @ 28.06.2005. 14:31 ] @
ne. niz nemozes deklarirat kao a[], zato sto kompajer nezna koliko ima elemenata u nizu. a[] mozeskoristit kao ulazni element funkcije, npr.

Code:
 void ispisi(int a[], int broj_elemenata); 


kad ti treba funkcija koja ce radit s poljem integera s bilo koliko elemenata, a prosljedis broj elemenata u funkciju kao drugu varijablu.

a[100] deklarira polje integera od 100 elemenata. ti elementi su u memoriji jedan iza drugog. znaci, ti zauzimas memoriju od 400 byteova za tvoj niz (int = 4 bytea). ovo je efikasno ako imas polje koje ima fiksno 100 elemenata u tvom programu. dakle nije dobro ako ti treba vise ili manje od 100 elemenata u polju. ako ti treba vise, nemozes nikako redimenzionirati ovo polje, a ako ti treba manje, imas bezveze zauzetu memoriju.

*a deklarira pokazivac na neki tip podataka(recimo int). dinamicka polja (tj. ona kojima se moze mjenjati velicina) se izradjuju na ovaj nacin. dakle, jedan pointer na tip integera pokazuje na neku memorijsku adresu gdje se nalazi jedan integer. polje se realizira ovako

Code:

    int *a, brojelemenata = 5;
    a = (int *)malloc(sizeof(int) * brojelemenata);
    a[4] = 2; [i]//isto koristis kao i normalno polje[/i]