12.03: Stringovi i funkcije
Stringovi kao parametri funkcija
Pošto su stringovi u C-u realizovani kao nizovi karaktera, korišćenje stringova u funkcijama vrši se na isti način kao korišćenje nizova.
Deklaracija funkcije koja uzima string kao ulazni parametar vrši se na isti način kao kod nizova. Parametri se mogu deklarisati kao nizovi
int funkcija(char str[]);
ili kao pokazivači
int funkcija(char* str);
Funkcije za rad sa stringovima kao argumente koriste pokazivače na početne karaktere stringova kojima zatim manipulišu.
U primeru koji sledi koristi se standardna funkcija strcat() da bi se dodao string str2 na kraj stringa str1. Niz karaktera, odnosno string str1 mora biti dovoljno veliki da bi mogao da prihvati sve karaktere stringa koji se dodaje na njega.
#include <string.h>
char str1[30]="Vreme je da idemo";
char str2[ ] = " na izlet !";
/* . . . */
strcat( str1, str2 );
puts( str1 );
Kao izlaz, prikazuje se novi sadržaj niza karaktera str1:
Vreme je da idemo na izlet !
Imena str1 i str2 su u stvari pokazivači na prvi element niza karaktera, odnosno na prvi karakter u stringu. Takav pokazivač se naziva i "pokazivač na string" ili kraće "string pokazivač".
Funkcije za manipulaciju sa stringovima, kao što su strcat() i puts() kao argumenta prihvataju početne adrese stringova. Takve funkcije u stvari obrađuju prisleđeni string karakter po karakter sve dok se ne stigne do kraja stringa, odnosno do nul karaktera '\0'.
U prethodnom primeru treba obratiti pažnju na sledeće:
Niz karaktera čija je adresa prvog elementa označena sa str1 mora imati dovoljno veliku dužinu, tj. da mu dužina bude jednaka bar zbiru dužina oba stringa, plus jedan za null karakter. Da bi se ovo proverilo, jedan od načina je da se pre poziva funkcije strcat() pozove standardna funkcija strlen(), koja kao rezultat vraća dužinu stringa na koju pokazuje argument funkcije:
if ( sizeof(str1) >= ( strlen(str1) + strlen(str2) +1 )
strcat( str1, str2);
Primer 2:
#include <stdio.h>
void prikazStringa(char str[]);
int main(void)
{
char str[50];
printf("Unesi string: ");
gets(str);
prikazStringa(str); // string smo prosledili kao funkciji.
return 0;
}
void prikazStringa(char str[])
{
printf("\n Imali smo String: ");
puts(str);
}