• 8 odgovora
  • 3.764 pregleda
[Zadatak] Dupliranje odredjenog karaktera 09.11.2005. u 17:51 · pre 255 meseci #1
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));
}



Potpis
there's something out there
waiting for us,
and it ain't no man...
Re: [Zadatak] Dupliranje odredjenog karaktera 09.11.2005. u 18:08 · pre 255 meseci #3
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]
Re: [Zadatak] Dupliranje odredjenog karaktera 10.11.2005. u 09:34 · pre 255 meseci #4
hmm... interesantno je da moj profesor vrsi deklaraciju samo sa char *a....

ok, hvala vam... ovo ce, kad izvrsim inicijalizaciju, vjerovatno biti ok....
Potpis
there's something out there
waiting for us,
and it ain't no man...
Re: [Zadatak] Dupliranje odredjenog karaktera 11.11.2005. u 00:04 · pre 255 meseci #5
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...
Potpis
EOF
Re: [Zadatak] Dupliranje odredjenog karaktera 12.11.2005. u 16:51 · pre 255 meseci #6
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...
Potpis
there's something out there
waiting for us,
and it ain't no man...
Re: [Zadatak] Dupliranje odredjenog karaktera 12.11.2005. u 18:58 · pre 255 meseci #7
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...
Re: [Zadatak] Dupliranje odredjenog karaktera 12.11.2005. u 19:07 · pre 255 meseci #8
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
Re: [Zadatak] Dupliranje odredjenog karaktera 13.11.2005. u 15:28 · pre 254 meseci #9
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....
Potpis
there's something out there
waiting for us,
and it ain't no man...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme