[ IDE @ 09.11.2005. 17:51 ] @
moze li mi ko pomoci da nadjem gresku zbog koje ovaj kod ne radi??

zadatak je sasvim jednostavan:

unosimo neku rijec ili recenicu i program treba da "pregleda" ono sto smo unijeli i da svako nadjeno slovo "d" uduplira...

znaci ako unesemo "zdravo!", kad program zavrsi svoje , treba da istampa "zddravo!"
dakle, moj kod:

Code:

#include <stdio.h>

char *prepravi(char *a)
{        
char *p,*q;
p=a;
while(*p!='\0')
{
if (*p!='d')
{
*q++=*p;
}
else
{
*q++=*p;
*q++=*p;
}
p++;
}
*q='\0';
return q;
}


main()
{
char *a;
printf("Unesite neku rijec: \n\n");
gets(a);
printf("prepravljena rijec: %s",prepravi(a));
}



[ NastyBoy @ 09.11.2005. 18:02 ] @
Nijedan od pointera (sem 'p') ti nije inicijalizovan, kompajler ti je sigurno prijavio to, chitaj warning-e
[ BigSmallMan @ 09.11.2005. 18:08 ] @
Ne smes da definises a kao char *a vec moras da zauzmes odgovarajucu memoriju za taj string, odnosno probaj a da definises kao char a[100].Probaj nesto ovako:
Code:

#include <stdio.h>

static char g[100];
 
char *prepravi(char *a)
{        
char *p,*q;
p=a;
q=g;
while(*p!='\0')
{
if (*p!='d')
{
*q++=*p;
}
else
{
*q++=*p;
*q++=*p;
}
p++;
}
*q='\0';
return q;
}


main()
{
char a[100];

printf("Unesite neku rijec: \n\n");
gets(a);
prepravi(a);
printf("prepravljena rijec: %s",g);
}


Naravno kod zahteva celokupnu promenu, ja sam promenio tvoj postojeci da bih ti ukazao na osnovnu gresku, a to je da uvek moras da zauzmes komad memorije za string, a ne da ga deklarises samo sa char*.


[Ovu poruku je menjao BigSmallMan dana 09.11.2005. u 19:30 GMT+1]
[ IDE @ 10.11.2005. 09:34 ] @
hmm... interesantno je da moj profesor vrsi deklaraciju samo sa char *a....

ok, hvala vam... ovo ce, kad izvrsim inicijalizaciju, vjerovatno biti ok....
[ glorius @ 11.11.2005. 00:04 ] @
gets funkcija NE ZNA koliko karaktera unosis sa tastature ( mogli su da naprave sistem stalnog realociranja memorije u gets funkciji ali to nije to zbog fragmentacije memorije ).

char a[100] znaci da ces maksimalno imati 100 karaktera i ne smes da ih prekoracis jer ce doci do "prelivanja" karaktera po memoriji ( memory leak ) ...

Tvoj profesor izgleda nije pokrenuo ovaj program... Obavezno ga ispravi...
[ IDE @ 12.11.2005. 16:51 ] @
da...ok ... sada je sve u redu...

ja sam znao sa char a[100] uraditi, ali sam htio provjeriti zasto profesor stavlja samo char *a....

uglavnom, sada je sve u redu...
[ X Files @ 12.11.2005. 18:58 ] @
Citat:

[...] jer ce doci do "prelivanja" karaktera po memoriji ( memory leak ) ...


Mislim da se pojava zove:

"buffer overun" ('pretrčavanje bafera')

... i ona je omiljena tehnika hakera, zbog kojih se generalno savetuje, na primer za
kopiranje: strncpy() umesto strcpy(), pri cemu se ono 'n' izracunava sa strlen().

Ovo pretrčavanje u principu ne mora da izazove Memory Leak, ali itekako moze
ako unisti adrese objekata...
[ NastyBoy @ 12.11.2005. 19:07 ] @
Citat:
ali sam htio provjeriti zasto profesor stavlja samo char *a....


Zato shto je nekada predavao OTO ili biologiju, pa prekomandovan u "informatiku" koja ga zanima koliko i mene biologija?
A ako si na faksu, tek onda nemam rechi... kazhi profi da svrati na ES
[ IDE @ 13.11.2005. 15:28 ] @
pa dobro...
ne zelim nikoga napadati...

mozda sam i ja pogrijesio....ko zna...??

ne desava mi se rijeko da "zaspem" na casu... :-)

ma nije ni vazno....


ok, hvala vam....