1. Sissejuhatus
Stringide võrdlemine C keeles on väga oluline nii programmide toimimises kui ka andmete sorteerimisel ja korrastamisel. Näiteks kasutatakse seda kasutaja sisestatud stringide võrdlemisel olemasolevate andmetega või andmete sorteerimisel. Selles artiklis selgitame üksikasjalikult, kuidas C keeles stringe võrrelda, tuues välja funktsioonide kasutusviisid ja praktilisi näiteid.
2. Funktsioonid, mida kasutatakse stringide võrdlemiseks
2.1 strcmp()
funktsioon
strcmp()
funktsiooni kasutatakse kahe stringi võrdlemiseks. See funktsioon tagastab täisarvu võrdluse tulemusena. Kui stringid on identsed, tagastab see 0; kui esimene string on leksikograafiliselt väiksem, tagastab see negatiivse väärtuse; kui suurem, siis positiivse väärtuse. strcmp()
kasutamiseks on vaja kaasata string.h
teek.
2.2 strncmp()
funktsioon
strncmp()
funktsioon töötab sarnaselt strcmp()
-ga, kuid võrdleb ainult määratud arvu märke. Näiteks saab sellega võrrelda ainult esimesed kolm märki. See funktsioon on turvalisem, kuna aitab vältida buffer overflow vigu. Kasutamiseks on samuti vaja string.h
teeki.
3. Näited stringide võrdlemisest
3.1 strcmp()
näide
Allpool on näide, kuidas kasutada strcmp()
stringide võrdlemiseks.
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "orange";
int result = strcmp(str1, str2);
if (result == 0) {
printf("The strings are equal.n");
} else if (result < 0) {
printf("str1 is less than str2.n");
} else {
printf("str1 is greater than str2.n");
}
return 0;
}
Selles programmis võrreldakse strcmp()
abil str1
ja str2
ning vastavalt tulemusele kuvatakse sõnum.
3.2 strncmp()
näide
Järgmiseks on toodud näide strncmp()
kasutamisest.
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "apple";
char str2[] = "application";
int result = strncmp(str1, str2, 3);
if (result == 0) {
printf("The first 3 characters are equal.n");
} else if (result < 0) {
printf("str1 is less than str2 in the first 3 characters.n");
} else {
printf("str1 is greater than str2 in the first 3 characters.n");
}
return 0;
}
Selles programmis võrreldakse strncmp()
abil ainult esimese kolme märgi võrra stringe.
4. Vigade käsitlemine ja turvalisus
4.1 Vigade käsitlemine
Stringide võrdlemisel tuleb vältida NULL-pointerite võrdlemist. Kui strcmp()
või strncmp()
funktsioonidele antakse NULL-pointer, võib programm kokku kukkuda. Seda saab vältida, kontrollides enne võrdlemist, et pointer ei ole NULL.
4.2 Buffer overflow vältimine
strncmp()
funktsioon aitab vältida buffer overflow probleeme, sest võrdleb ainult määratud arvu märke. See on eriti oluline välisest sisendist pärit andmete töötlemisel.
5. Kokkuvõte
C keeles stringide võrdlemisel kasutatakse peamiselt kahte funktsiooni: strcmp()
ja strncmp()
. Igal funktsioonil on oma kindel kasutusviis ja ohutuse tagamiseks tuleb järgida teatud punkte. Eriti strncmp()
on soovitatav, kui on vaja rohkem turvalisust. Loodetavasti aitas see artikkel mõista nende funktsioonide kasutamist ja vigade käsitlemist. Nende õigel kasutamisel saate luua töökindlamaid programme.
6. KKK
6.1 Mis vahe on strcmp()
ja strncmp()
vahel?
strcmp()
võrdleb kahte stringi täielikult, kuid strncmp()
võrdleb ainult etteantud arvu märke. strncmp()
kasutatakse sageli buffer overflow vältimiseks.
6.2 Kuidas käituda, kui strcmp()
tulemus pole 0?
Kui tulemus pole 0, näitab negatiivne väärtus, et esimene string on leksikograafiliselt väiksem, ja positiivne väärtus, et suurem. Tulemust tuleb töödelda vastavalt programmi nõuetele.
6.3 Millele tähelepanu pöörata NULL-pointerite võrdlemisel stringidega?
Kui NULL-pointer antakse strcmp()
või strncmp()
funktsioonile, võib programm kokku kukkuda. Seega on oluline enne võrdlust veenduda, et pointer ei ole NULL.