Tuolla aikaisemmin oli jo kysytty merkkijonoista ja niiden poistamisesta. Minulla on samanlainen ongelma ja yritin tehdä kyseisten ohjeiden mukaan, mutta pieleen menee eli tulostettaessa teksti uudestaan katkeaa se siihen poistettavaan merkkijonoon eikä loppuosa tule mukaan. Miten ohjelmaa pitäisi korjata että se toimii oikein?
#include
#include
void ali (char *teksti, char *p)
{
char *p1 = teksti;
char *p2;
int l = strlen(p);
static char pala[256];
pala[0] = '';
while((p2 = strstr(p1,p))!= NULL)
{
*p2 = '';
strcat(pala,p1);
p1 = p2 l;
}
strcat(pala,p1);
}
main (void)
{
char pala, p1;
char teksti[128]="Tästä tekstistä ohjelma poistaa merkkijonon.
Tämän jälkeen teksti tulostetaan näytölle.";
printf("
%s",teksti);
printf("
Anna etsittava sana/kirjaimet
");
char p[50];
gets(p);
ali(teksti,p);
printf (pala,p1);
return 0;
}
#include
#include
void ali (char *teksti, char *p)
{
char *p1 = teksti;
char *p2;
int l = strlen(p);
static char pala[256];
pala[0] = '';
while((p2 = strstr(p1,p))!= NULL)
{
*p2 = '';
strcat(pala,p1);
p1 = p2 l;
}
strcat(pala,p1);
}
main (void)
{
char pala, p1;
char teksti[128]="Tästä tekstistä ohjelma poistaa merkkijonon.
Tämän jälkeen teksti tulostetaan näytölle.";
printf("
%s",teksti);
printf("
Anna etsittava sana/kirjaimet
");
char p[50];
gets(p);
ali(teksti,p);
printf (pala,p1);
return 0;
}
Vastaukset 2
Vanhimmat
En edes jaksanut lukea koodia, mutta luulen että siihen sun tulostettavaan merkkijonoon tulee mukaan lopetusmerkki tms. Eli ohjelma luulee että merkkijono on jo lopussa vaikkei se ookkaan. Käytä sellaisia String funktioita jotka ei lisää lopetusmerkkiä jonojen perään.
eli funktio ali tulisi palauttaa:
char *ali (char *teksti, char *p)
{
....
return pala;
}
printf() käytetään väärin.
eli haluat tulostaa palan:
char *pala;
...
pala = ali(teksti,p);
...
puts(pala) tai printf("
%s",pala);
ja tuossa on sama vika kuin alkuperäisessäkin:
alkuperäinen puskuri tuohotaan ja muisti pitäisi varata dynaamisesti. eikä todellakaan mikään aloittelija ystävällinen esimerkki :(