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.