Funktio hakee merkkijonosta palasen joka alkaa tietystä annetusta kohdasta joka joko annettuun merkkiin asti tai on annetun mittainen.
Funktio on suojattu virheitä vastaan ja virhe tilanteessa se palauttaa tyhjän merkkijonon.
Myöskin esimerkki pahamaineisin goto:n käytöstä.
/*
parametrit:
const char* IN = osoitin merkkijonoon josta haetaan
int start = kohta josta aloitetaan
char end = merkki johon lopetetaan
char end2 = toinen merkki johon lopetetaan
int max = ulostulevan merkkijonon maksimi pituus.
char* OUT = osoitin merkkijonoon johon haettu pätkä tallennetaan.
*/
void HaeString(const char* IN, int start, char end, char end2, int max, char* OUT)
{
if(!IN || !OUT)//tarkistetaan että osoittimet on kunnossa
goto loppu; //jos ei ole niin mennään loppuun
//luvut kohdan laskemiseen
int i=0; // aloitetaan nollasta koska muuten jos IN on lyhyempi kuin start käy huonosti.
int o=0;
if(start<0) // jos virheellinen aloituskohta
goto loppu;
if(start!=0)
start--;
//looppi kunns IN loppuu tai OUT:in maksimi pituus täyttyy
while(IN[i]!='\0' && o < max)
{
i++;
if(i < start)//haettava kohta ei vielä alkanut
continue;
if(IN[i]==end || IN[i]==end2)//jos loppu merkki
goto loppu;
OUT[o]=IN[i];
o++;
}
loppu:
OUT[o]='\0';//lopetus merkki
return;
}int main()
{
char merkkijono[100]="esimerkki";
char buf[50]="";
HaeString(merkkijono, 2, 'k', 49, buf);
printf("%s\n",buf);//tulostaa "simer"
system("PAUSE");
return 0;
}miksei näin
if(!IN || !OUT) {
OUT[o]='\0';//lopetus merkki
return;
}
else {
//muut koodit
}niin päästäisiin turhasta gotosta eroon...
Aihe on jo aika vanha, joten et voi enää vastata siihen.