Appunti di programmazione

Appunti per il corso universitario di programmazione, riferito al linguaggio ANSI C
Redatti all'università di Venezia

ARGOMENTI

STRUTTURA COMPUTER

DEFINIZIONI

TASTIERA E TIPI

AMBIENTE E MEMORIA

COMANDI

FUNZIONI E PROCEDURE

TIPI DERIVATI

PUNTATORI

STRINGHE

ARRAY DI PUNTATORI

STRUTTURE

TYPEDEF E ENUM

PUNTATORI A PROCEDURE

ALLOCAZIONE DINAMICA

LISTE

ALGORITMI

ERRORI

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)

Ritorna sopra | Home page