STRINGHE
una stringa in C è
un array di tipo base char, il cui segmento iniziale termina con '\0'
(l'array può anche essere più grande, ma posso avere
una stringa contenuta più corta dell'array stesso)
In generale per
memorizzare una stringa di k caratteri dovrò utilizzare array
di char di dimensione ³ k +
1
es.
char
p[5] = {'c','a','n','e','\0'};
equivalente a:
char
p[] = {'c','a','n','e','\0'};
oppure a:
char
p[] = “cane”;
printf(“pippo”);
è stata allocata
da qualche parte nella memoria una stringa di valore “pippo”
eqivalente a:
printf(“%s”,
pippo);
senza & perchè
è già un indirizzo
se manca \0 printf
continua a stampare la memoria finchè non trova \0
char
p[9] = {'c','a','n','e','-','-','0','7'};
non posso fare q = p
(con q e p stringhe)
devo utilizzare:
char
p[5] = {'c','a','n','e','\0'};
char
q[5] = {'h','\0'};
strcpy(p,
q);
(p[5]
= {'h','\0','n','e','\0'};)
strcpy(q,
p);
fallisce in quanto la
stringa di destinazione è più corta della stringa di
origine;
bisogna verificare la
lunghezza della stringa utilizzando strlen(stringa) che ritorna il
numero di caratteri che formano la stringa (escluso \0)
char
*p = “vino”;
*p
= 'r';
compila ma mi da un
risultato errato perché cerca di accedere ad un area di
memoria che non può raggiungere (segmentation fault, cosa che
non succede con un compilatore C++)
strcat(p,
q);
anche qui bisogna
controllare la dimensione dell'array in cui vado ad unire le stringhe
strcmp(p,
q);
mi confronta il
contenuto delle stringhe
per essere
riconoscibili dalle funzione della libreria standard string.h devono
comprendere il carattere terminatore \0
char
*q;
q
= “pippo”;
lo posso fare ma sarà
nettamente diverso da:
char
q[] = “pippo”;
(nel primo caso
lavoravo con indirizzi)
|