Šiame straipsnyje nagrinėsime strlen funkciją C programavimo kalboje. Be to, jūsų laukia ir testo tipo žinių patikrinimas. Šį straipsnį sudaro šios 4 dalys.
Funkcijos prototipas:size_t strlen(const char *str);
Grąžinama reikšmė: sveikasis skaičius lygus simbolių skaičiui gautame masyve (simbolis '\0' nėra skaičiuojamas).
Parametrų sąrašas: (const char *str) - simbolių masyvas, kurio simbolių skaičius yra skaičiuojamas ir grąžinamas.
Antraščių failas:<string.h>.
1. Funkcija strlen. Kas tai?
Funkcija strlen C programavimo kalboje priima vieną parametrą, tai yra simbolių masyvą (char *). Tada yra skaičiuojamas šio masyvo simbolių skaičius, kurį, savo ruožtu, ir grąžina strlen funkcija.
Naudinga žinoti: strlen funkcija skaičiuoja simbolius iki null simbolio ('\0'). Šis simbolis nėra pridedamas prie galutinio rezultato.
Jeigu mes perduodame strlen funkcijai argumentą "katinas", tada iš strlen funkcijos grįžtanti sveikojo skaičiaus reikšmė yra 7. Nors šį styginį literalą (angl. string literal ) ir sudaro 8 simboliai, tai yra 'k', 'a', 't', 'i', 'n', 'a', 's', '\0' (simbolis null (angl. null terminator) yra pridedamas automatiškai C kalboje prie styginių literalų).
Funkcija strlen yra aprašyta <string.h> bibliotekoje. O tai reiškia, jog prieš naudodami šią C kalbos funkciją turime pasirūpinti, jog mūsų programoje yra pastaroji eilutė:
#include <string.h>.
Pavyzdys 1: strlen funkcijos naudojimas
#include<string.h>
intmain(void)
{
strlen("katinas");//grąžina 7
return0;
}
2. Funkcijos strlen perrašymas
Pažvelkite į C kalbos kodą žemiau (pavyzdys 2).
Pavyzdys 2: C programavimo kalba perrašyta strlen funkcija
unsigned intnauja_strlen(const char*str )
{
unsigned intilgis = 0;
while( str[ilgis] != '\0')
ilgis++;
returnilgis;
}
Čia mes aprašome nauja_strlen funkciją, kuri priima vieną parametrą, visai kaip standartinė strlen funkcija, ir grąžina vieną sveikąjį skaičių, visai kaip standartinė strlen funkcija.
Funkcijoje nauja_strlen mes inicializuojame ilgis kintamąjį ir suteikiame jam reikšmę lygią nuliui. Po to, mes tikriname sąlygą, ar gautame simbolių masyvo atitinkamame elemente yra laikoma '\0' reikšmė (4 eilutė). Tokiu atveju, mes paliekame ciklą (angl. loop ) ir grąžiname ilgis kintamojo reikšmę. Kuo daugiau elementų turi tikrinamas simbolių masyvas, tuo daugiau kartų pakartojamas ciklas, kuriame su lyg kiekvienu apsisukimu auga kintamojo ilgis reikšmė.
Dabar perduodami skirtingas simbolių masyvo ar stringinio literalo reikšmes nauja_strlen funkcijai, mes galime tikėtis tų pačių rezultatų kaip ir standartinės strlen funkcijos atveju. Visgi, mes galima ir geriau. O daugiau apie tai trečioje dalyje.
3. Galimi būdai patobulinti strlen funkciją
Funkcija strlen yra puiki ir dažnai taikoma, tačiau su šia funkcija kyla problemų, jeigu jai perduodame tam tikras reikšmes. Viena tokių reikšmių yra NULL, o kita problemas kelianti reikšmė yra simbolių masyvas, neturintis nei vieno '\0' simbolio.
Pirmu atveju, jeigu mes perduodame strlen funkcijai NULL reikšmę, tada mūsų programą ištinka prieigos pažeidimas (angl. segfault arba segmentation fault ). To galime išvengti, jeigu patikriname, jog gauta reikšmė nėra lygi NULL reikšmei ir tik po to tikriname gauto masyvo indeksus.
Antru atveju, tai yra jeigu strlen funkcija gauna simbolių masyvą, kuriame nėra '\0' simbolio, tada galimas programos elgesys nėra apibrėžtas, todėl dažnu atveju kyla nepageidautinų pasėkmių. Šioje vietoje nėra programos pakeitimų, kurie leistų išvengti šios problemos. Todėl reikia pasirūpinti, jog perduodami simbolių masyvai šiai funkcijai turėtų simbolį '\0'.