1. Sissejuhatus
C-keeles käsitletakse stringe lihtsalt kui märkide massiive. Selle eripära tõttu on nende käsitlemine teistsugune kui teistes keeltes. Eriti on stringide omistamisel ja initsialiseerimisel hädavajalik kasutada nullmärki (
) lõputähisena. Selles artiklis, teemal „c keel stringi omistamine“, selgitame üksikasjalikult alates põhilisest deklareerimisest kuni stringide omistamise ja töötlemise meetoditeni. Samuti käsitleme tähelepanekuid, mis on vajalikud programmi stabiilsuse säilitamiseks.
2. Stringide deklareerimine ja initsialiseerimine
C-keeles deklareeritakse stringid märkide massiivide kaudu. Allpool on toodud levinumad deklareerimis- ja initsialiseerimisviisid.
Deklareerimine ja initsialiseerimine massiivi abil
Stringi saab deklareerida ja initsialiseerida massiivi kaudu järgmiselt:
char greeting[] = "Hello";
Eespool toodud näites initsialiseeritakse greeting
-string väärtusega „Hello“ ning lõppu lisatakse automaatselt nullmärk (
). C-keeles võib massiivi initsialiseerimisel kasutada =
-operaatorit. Sellisel juhul jäetakse suuruse määramine tavaliselt ära.
Nullmärgi lisamine
Kui string initsialiseeritakse üksikute märkidega, tuleb nullmärk lisada käsitsi, näiteks nii:
char greeting[6] = {'H', 'e', 'l', 'l', 'o', ' '};
C-keeles ei tööta stringifunktsioonid korrektselt ilma nullmärgita ning võivad lugeda mälu piiridest väljapoole, põhjustades soovimatut käitumist.

3. Stringide omistamise viisid
C-keeles ei saa stringi otseselt omistada. Selleks, et kopeerida stringi sisu teise muutujasse, kasutatakse funktsiooni strcpy
.
Funktsiooni strcpy põhiline kasutamine
strcpy
kuulub standardteeki <string.h>
ning seda kasutatakse järgmiselt:
#include <stdio.h>
#include <string.h>
int main() {
char source[] = "Hello";
char destination[10];
strcpy(destination, source);
printf("Kopeeritud string: %s\n", destination);
return 0;
}
Selles näites kopeeritakse source
-stringi sisu destination
-muutujasse ning destination
sisaldab „Hello“. Kuna strcpy
ei arvesta massiivi suurust, tuleb vältida suuruse ületamist.
4. Stringide töötlemine
C-keeles on mitmeid mugavaid funktsioone stringide töötlemiseks. Allpool selgitame tihti kasutatavaid funktsioone, nagu strlen
, strcat
ja strcmp
.
Stringi pikkuse leidmine: strlen
Stringi pikkuse määramiseks kasutatakse funktsiooni strlen
. See tagastab märkide arvu, jättes nullmärgi arvestamata.
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello";
printf("Stringi pikkus: %zu\n", strlen(str));
return 0;
}
Stringide ühendamine: strcat
strcat
ühendab ühe stringi teise stringi lõppu.
#include <stdio.h>
#include <string.h>
int main() {
char greeting[20] = "Hello";
char name[] = " World";
strcat(greeting, name);
printf("Ühendatud string: %s\n", greeting);
return 0;
}
Stringide võrdlemine: strcmp
strcmp
võrdleb kahte stringi leksikograafiliselt. Kui need on võrdsed, tagastab 0; kui erinevad, siis positiivse või negatiivse väärtuse.
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
int result = strcmp(str1, str2);
if (result == 0) {
printf("Stringid on samad.\n");
} else {
printf("Stringid on erinevad.\n");
}
return 0;
}
See võimaldab kontrollida, kas stringid on võrdsed või kumb tuleb sõnastikujärjekorras enne.
5. Stringide käsitlemine osutitega
Stringe saab käsitleda ka osutite abil. See võimaldab paindlikumat mäluhaldust, kuid valed operatsioonid võivad põhjustada vigu või krahhe.
Stringi omistamine osuti abil
Osutite kasutamisel saab stringi deklareerida ja omistada järgmiselt:
#include <stdio.h>
int main() {
char *greeting = "Hello";
printf("%s\n", greeting);
return 0;
}
Nagu ülal näha, saab osutiga viidata otse stringiliteralile. Kuid selle sisu ei saa muuta.
6. Kokkuvõte ja tähelepanekud
Stringide omistamisel ja töötlemisel võivad kergesti tekkida vead, nagu suuruse ületamine või osutite vigane kasutamine. Eriti strcpy
ja strcat
puhul tuleb arvestada massiivi suurust ja tagada piisav puhvri maht. Samuti tuleb osutite kasutamisel hoolikalt jälgida nullmärgi käsitlemist ja mäluhaldust. Kui järgida õigeid samme, on stringide töötlemine tõhus viis andmete käsitlemiseks.