LABORATORIO di INFORMATICA

Documenti analoghi
Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

Funzioni, Stack e Visibilità delle Variabili in C

Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2008/2009. formalizzazione degli algoritmi in linguaggio C

ESECUZIONE DI PROGRAMMI C SU MACCHINE REALI. Docente: Giorgio Giacinto AA 2009/2010

Array k-dimensionali

Concetto di Funzione e Procedura METODI in Java

Dove vengono definiti? il concetto di sottoprogramma

Linguaggio C: introduzione

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Ottenere una modifica del parametro attuale

Fondamenti di Informatica 6. Algoritmi e pseudocodifica

Linguaggio C - sezione dichiarativa: costanti e variabili

Introduzione al C. Introduzione. Linguaggio ad alto livello. Struttura di un programma C

Unità F1. Obiettivi. Il linguaggio C. Il linguaggio C++ Linguaggio C. Pseudolinguaggio. Primi programmi

Librerie Stringhe. Librerie e stringhe. Lezione 9. Laboratorio di Programmazione I. Corso di Laurea in Informatica A.A. 2015/2016

GESTIONE DEI FILE IN C. Docente: Giorgio Giacinto AA 2008/2009

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Esercizio 1: funzione con valore di ritorno di tipo puntatore

LA RICORSIONE IN C. CdL Ingegneria Informatica n.o. Anno Accademico 2006/07 Fondamenti di Informatica I corso A Giacomo Piscitelli pag.

Caratteri e stringhe

Informatica 1. Corso di Laurea Triennale in Matematica. Gianluca Rossi

ELEMENTI DI INFORMATICA L-B. Ing. Claudia Chiusoli

Definizione di metodi in Java

Struttura dei programmi C

Esercitazione 11. Liste semplici

Non ci sono vincoli sul tipo degli elementi di un vettore Possiamo dunque avere anche vettori di

Primi passi col linguaggio C

IL PRIMO PROGRAMMA IN C

Linguaggio C: le funzioni. Visibilità variabili e passaggio parametri

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

Strutture Dati Dinamiche

Argomenti Avanzati.! I puntatori! Stack! Visibilità delle Variabili

Linguaggio C: le funzioni. Introduzione e sintassi

Scope delle variabili e passaggio parametri. Danilo Ardagna Politecnico di Milano

Linguaggio C Struttura dei programmi

Tempo di vita e scope delle variabili

Breve Manuale di Riferimento sulla Sintassi Linguaggi C++ e FORTRAN

C: panoramica. Violetta Lonati

L Allocazione Dinamica della Memoria

Compendio sottoinsieme del C++ a comune col C. (Libreria standard, Input/Output, Costanti, Dichiarazioni e typedef, Memoria Dinamica)

Il linguaggio C. Notate che...

L'Allocazione Dinamica della Memoria nel linguaggio C

Stringhe e allocazione dinamica della memoria

Linguaggio C: le funzioni. Introduzione e sintassi

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Funzioni in C. Funzioni. Strategie di programmazione. Funzioni in C. Come riusare il codice? (2/3) Come riusare il codice? (1/3)

Funzioni e. Alessandra Giordani Mercoledì 16 maggio 2012

$QDOLVLGHOSURJUDPPDTXDGUDWR

Input/Output. Lettura e scrittura Caratteri e Stringhe: Terminale e file. Input/output. caratteri stringhe formattato ascii binari

La sintassi del C APPENDICE H

1 PANORAMICA SUL LINGUAGGIO C

Strategie di programmazione

Il linguaggio C. Puntatori e dintorni

Introduzione. Le funzioni in C. Funzioni. Cosa succede

Le basi del linguaggio Java

Linguaggio C: le funzioni

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Esercizio 2 (punti 7) Dato il seguente programma C: #include <stdio.h> int swap(int * nome, int length);

Implementazione dell albero binario in linguaggio C++

Lezione 19 e Allocazione dinamica della memoria - Direttive al preprocessore - Libreria standard - Gestione delle stringhe

Input/Output di numeri

Struct, enum, Puntatori e Array dinamici

Funzioni. Unità 1. Domenico Daniele Bloisi. Corso di Fondamenti di Informatica Ingegneria delle Comunicazioni BCOR Ingegneria Elettronica BELR

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

C O P Y R I G H T ( C ) W W W. F O N D A M E N T I. I N F O

Il sistema C è formato dal linguaggio C, dal preprocessore, dal compilatore, dalle librerie e da altri strumenti di supporto.

Algoritmi e basi del C Struttura di un programma

Algoritmi, Strutture Dati e Programmi. UD 2.b: Programmazione in Pascal

Gestione dinamica della memoria

Funzioni, puntatori, strutture. Lab. Calc. AA 2006/07

Preprocessore, linker e libreria standard

Programmazione di base

9 - Array. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Costanti e Variabili

Operazioni su file di caratteri

Laboratorio di Programmazione: Linguaggio C Lezione 21 del 19 maggio 2014

Capitolo 5 - Funzioni

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

FUNZIONI COME COMPONENTI SW FUNZIONI COME COMPONENTI SW FUNZIONI MODELLO CLIENTE/SERVITORE

RELAZIONE DELLA PROVA DI LABORATORIO DI INFORMATICA

INTRODUZIONE ALLA PROGRAMMAZIONE

Perché il linguaggio C?

Corso sul linguaggio Java

Complementi. - Ridefinizione di tipo - - Costrutto switch - - Programmazione su più file - - Parametri della funzione main - Funzione system -

Introduzione ai puntatori in C Definizione

Programmazione (imperativa)

Il linguaggio C funzioni e puntatori

Passare argomenti al programma

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Introduzione Funzioni in C

ESERCIZIO 1. Si considerino le seguenti definizioni:

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Stringhe. Anno Accademico 2010/2011 Francesco Tortorella

Unità Didattica 1 Linguaggio C. Fondamenti. Struttura di un programma.

I puntatori sono tipi di variabili il cui valore rappresenta un indirizzo della memoria.

Le direttive del Preprocessore

Le funzioni, e le istruzioni di input/output

Istituto Tecnico Industriale M. M. Milano Polistena. Classe III D a.s. 2015/2016 C++ Guida Base

Programmazione Procedurale in Linguaggio C++

Transcript:

Università degli Studi di Cagliari Corso di Laurea Magistrale in Ingegneria per l Ambiente ed il Territorio LABORATORIO di INFORMATICA A.A. 2010/2011 Prof. Giorgio Giacinto FUNZIONI E PROCEDURE http://www.diee.unica.it/giacinto/lab Introduzione! La definizione di tipi da parte dell utente mediante typedef non consente di definire nuove operazioni sui tipi! Per definire nuove operazioni sui tipi, sia definiti dall utente, sia predefiniti, il C consente di creare funzioni e procedure! Ad es. per calcolare la n-esima potenza della variabile x, x n, sarebbe comodo poter usare una istruzione del tipo y=pow(x,n); invece di usare esplicitamente un ciclo che moltiplica n volte x per se stesso Giorgio Giacinto 2010 Laboratorio di Informatica 2

Introduzione (cont.)! Un linguaggio di programmazione non definisce tutte le operazioni di cui si può avere bisogno! E necessario disporre di meccanismi per la creazione di nuove operazioni su qualsiasi tipo di dato! Tali meccanismi sono generalmente chiamati sottoprogrammi perché hanno la stessa struttura dei programmi principali! In C esistono due tipi di sottoprogrammi: le funzioni e le procedure Giorgio Giacinto 2010 Laboratorio di Informatica 3 Struttura di un programma C! La struttura di un programma C include! Una parte di direttive al preprocessore C! Una parte dichiarativa globale! dichiarazioni di tutti gli elementi condivisi dal programma principale e dai sottoprogrammi (costanti, tipi, variabili, ): alle variabili dichiarate in questa sezione possono avere accesso il programma principale e tutti i sottoprogrammi! Un programma principale (il main) composto da! Una parte dichiarativa! Una parte esecutiva! Una successione di definizioni di sottoprogrammi (funzioni o procedure) Giorgio Giacinto 2010 Laboratorio di Informatica 4

Funzioni! E un tipo di sottoprogramma che realizza operazioni astratte che corrispondono (anche se non esclusivamente) al significato matematico di funzione (Somma, Prodotto, )! Il C mette a disposizione gli strumenti per costruire (definire) e usare (chiamare) sottoprogrammi che realizzano le operazioni non disponibili nel linguaggio. Giorgio Giacinto 2010 Laboratorio di Informatica 5 Definizione delle funzioni! La struttura di una funzione e molto simile a quella di un programma! Sintassi della definizione di una funzione TipoRisultato Funzione(<lista_parametri_formali>) <parte_dichiarativa_locale> <istruzioni> intestazione (header) Giorgio Giacinto 2010 Laboratorio di Informatica 6

Intestazione di una funzione L intestazione contiene Tipo del risultato (codominio della funzione)! può essere di tipo built-in o di tipo user-defined Identificatore del sottoprogramma seguito da una coppia di parentesi tonde che possono contenere una lista di parametri formali Lista dei parametri formali, separati da virgole, cui la funzione viene applicata (dominio della funzione) Esempio: int FatturatoTotale(ElencoFatture par) Una funzione non può restituire array o funzioni ma può restituire un puntatore a qualsiasi tipo Giorgio Giacinto 2010 Laboratorio di Informatica 7 Parte dichiarativa e corpo delle funzioni! Parte dichiarativa locale! si definiscono tutti gli oggetti necessari alla realizzazione dell operazione astratta! obbediscono alle stesse leggi per la costruzione della parte dichiarativa di un programma! Corpo della funzione! medesime regole sintattiche del programma principale! al suo interno vi può essere un istruzione di return return <espressione>! return termina l esecuzione della funzione e restituisce il risultato! <espressione>, è il risultato della valutazione della funzione Giorgio Giacinto 2010 Laboratorio di Informatica 8

Istruzione return! Se nessuna istruzione di return è presente nel corpo della funzione, il sottoprogramma termina in corrispondenza del simbolo chiave che conclude il corpo della funzione Esempio int RadiceIntera (int param) int cont = 0; while (cont*cont <= param) cont++; return (cont-1); Giorgio Giacinto 2010 Laboratorio di Informatica 9 Chiamata delle funzioni! La chiamata di una funzione (in altri linguaggi si usa la parola chiave call) avviene all interno di un espressione! Sintassi <identificatore_funzione>(<lista_parametri_attuali>) Esempio: y=radiceintera(7);! I parametri attuali indicano i valori degli argomenti rispetto ai quali la funzione deve essere calcolata! In generale: una espressione o una chiamata di funzione! Corrispondenza tra parametri formali e attuali! si segue l ordine della dichiarazione: a ciascun parametro formale deve corrispondere un parametro attuale dello stesso tipo Giorgio Giacinto 2010 Laboratorio di Informatica 10

Esempi di chiamate di funzioni x = sin(y) cos(pigreco alfa); Totale = Somma(Lista1) + Somma(Lista2); ElencoOrdinato = Ordinamento(Elenco); OrdineAlfabetico = Precede(nome1, nome2); x, Totale, ElencoOrdinato e OrdineAlfabetico sono variabili dello stesso tipo ritornato dalle funzioni sin, cos, Somma, Ordinamento e Precede sono funzioni definite nel programma Giorgio Giacinto 2010 Laboratorio di Informatica 11 Prototipo delle funzioni! All interno di un programma C una funzione può essere chiamata purché risulti definita oppure dichiarata! Definizione: definisce le operazioni da eseguire! Dichiarazione (o prototipo): si limita a richiamarne la testata prima che venga chiamata e prima della definizione! Scopo della dichiarazione! Quando il compilatore incontra una chiamata di funzione prima della sua definizione, può controllare immediatamente il numero e il tipo dei parametri utilizzati e il tipo del risultato restituito dalla funzione attraverso il confronto con il prototipo. Giorgio Giacinto 2010 Laboratorio di Informatica 12

(1) Programma per il calcolo delle potenze 1/4 #include <stdio.h> /* Parte direttiva */ double quad(float); /* Prototipi funzioni */ double cubo(float); double quar(float); double quin(float); double pote(float,int); Giorgio Giacinto 2010 Laboratorio di Informatica 13 (1) Programma per il calcolo delle potenze 2/4 main() /* Parte principale del programma */ int base, esponente; /* Variabili del main */ double ptnz; printf( Inserire base: ); scanf( %d, &base); printf( Inserire esponente (0-5): ); scanf( %d, &esponente); ptnz = pote(base, esponente); /* Chiamata alla funzione */ if(ptnz == -1) printf( Potenza non prevista\n ); else printf( La potenza %d di %d e %f\n, esponente, base, ptnz); /* Fine del main */ Giorgio Giacinto 2010 Laboratorio di Informatica 14

(1) Programma per il calcolo delle potenze 3/4 double quad(float c) /* Definzione funzione */ return(c*c); double cubo(float c) /* Definzione funzione */ return(c*c*c); double quar(float c) return(c*c*c*c); double quin(float c) return(c*c*c*c*c); Giorgio Giacinto 2010 Laboratorio di Informatica 15 (1) Programma per il calcolo delle potenze 4/4 double pote(float b, int e) /* Definzione funzione */ double ris; switch(e) case 0: ris = 1; case 1: ris = b; case 2: ris = quad(b); case 3: ris = cubo(b); case 4: ris = quar(b); case 5: ris = quin(b); default: ris = -1; return (ris); Giorgio Giacinto 2010 Laboratorio di Informatica 16

Esecuzione delle funzioni e passaggio dei parametri! Immaginiamo tre diverse macchine astratte! una principale dedicata all esecuzione del main! una asservita (slave) dedicata all esecuzione della funzione pote! rispetto alla funzione pote abbiamo un altra macchina asservita dedicata all esecuzione di una delle funzioni quad, cubo, quar, quin! La macchina principale ha bisogno di un valore che le può essere fornito dalla macchina asservita! Con la chiamata alla macchina asservita si ha il passaggio del valore e la cessione del controllo a quest ultima! Al termine dell esecuzione della funzione il controllo viene restituito alla macchina principale con il parametro richiesto (tramite return) Giorgio Giacinto 2010 Laboratorio di Informatica 17 Esecuzione delle funzioni e passaggio dei parametri (cont.) base esponente b e c ptnz ris <return> Ambiente del main Ambiente di pote Ambiente di quad,cubo, quar,quin Giorgio Giacinto 2010 Laboratorio di Informatica 18

Esecuzione delle funzioni e passaggio dei parametri (cont.)! Il passaggio del risultato al main avviene attraverso una variabile (non dichiarata) che coincide con il nome della funzione! Passaggio dei parametri (freccia ")! copia del valore di ciascun parametro attuale nella cella del corrispondente parametro formale! Dopo il passaggio dei parametri, il controllo passa alla macchina asservita! l esecuzione della macchina principale viene sospesa! return restituisce il controllo alla macchina principale che preleva il valore del risultato Giorgio Giacinto 2010 Laboratorio di Informatica 19 Le procedure! In varie occasioni il compito di un operazione astratta non è produrre un valore di un certo tipo, ma è modificare il contenuto del programma che ne chiede l esecuzione! In questi casi si utilizza un diverso tipo di sottoprogramma chiamato procedura! Definizione di procedura In C: una funzione avente come tipo del risultato il tipo speciale void (assenza di un risultato) Giorgio Giacinto 2010 Laboratorio di Informatica 20

Esempi di procedure Inserimento di una fattura in un archivio Ordinare un array di interi o di stringhe Stampare una rubrica telefonica con un determinato formato! Il risultato atteso non è un valore ma l aggiornamento o la modifica della struttura dati su cui opera la procedura Giorgio Giacinto 2010 Laboratorio di Informatica 21 Chiamata di una procedura! Analoga alla chiamata di una funzione.! Manca un valore ritornato: non può trovarsi a destra di una operazione di asssegnazione o come termine di un espressione <identificatore_procedura>(<parametri_attuali>); Esempio OrdinaElenco(ElencoPersonale);! Corrispondenza tra parametri formali e attuali! si segue l ordine della dichiarazione: a ciascun parametro formale deve corrispondere un parametro attuale dello stesso tipo Giorgio Giacinto 2010 Laboratorio di Informatica 22

Esecuzione delle procedure! Consideriamo le macchine astratte principale (per il main) e asservita (per la procedura)! Al termine dell esecuzione la macchina asservita cede il controllo alla macchina principale! Non viene prodotto alcun valore come risultato! L effetto che si ottiene è in genere la modifica della variabile passata come parametro (ma, ad es., una procedura può avere il compito di riportare dei valori a video o su stampante)! Possibile solo nel caso di utilizzo di variabili globali? Giorgio Giacinto 2010 Laboratorio di Informatica 23 Struttura completa di un programma C! Un programma C consiste in! Una parte direttiva! Una parte dichiarativa che comprende:! Dichiarazioni di costanti! Dichiarazioni di tipi! Dichiarazioni di variabili! Prototipi di procedure e funzioni! Un programma principale main! Definizione di funzioni e procedure! Un programma C può essere descritto come! un insieme di funzioni e di variabili proprie dell ambiente globale del programma.! Una delle funzioni deve essere identificata come main Giorgio Giacinto 2010 Laboratorio di Informatica 24

main e funzioni e procedure! L esecuzione del programma globale inizia con la prima istruzione della parte esecutiva del main.! L intestazione del main è l intestazione di una funzione che può coinvolgere come tipo del risultato e dei parametri di ingresso il tipo speciale void void main (void) Il main può contenere parametri di ingresso che consentono la comunicazione tra ambiente di programma e ambiente del sistema operativo Giorgio Giacinto 2010 Laboratorio di Informatica 25 Il concetto di blocco! Definizione un blocco consiste di due parti sintattiche racchiuse tra parentesi graffe! Una parte dichiarativa (facoltativa)! Una sequenza di istruzioni! Diversi blocchi possono comparire internamente al main o alle funzioni che compongono un programma Giorgio Giacinto 2010 Laboratorio di Informatica 26

Esempi di blocchi #include <stdio.h> int g1,g2; int f1(int par1, int par2);... main() int a,b;... /* blocco1 */ char a,c;...... continua# int f1(int par1, int par2) int d;... /* blocco2 */ int e;... /* blocco3 */ int d;...... Giorgio Giacinto 2010 Laboratorio di Informatica 27 Visibilità delle variabili! Vediamo alcune definizioni:! Si dice ambiente globale di un programma l insieme di tutti gli elementi dichiarati nella sua parte dichiarativa globale! Si dice ambiente locale di una funzione l insieme di tutti gli elementi dichiarati nella sua parte dichiarativa e nella sua testata! Si dice ambiente di un blocco l insieme di tutti gli elementi dichiarati nella sua parte dichiarativa! Il concetto di ambiente permette di dichiarare più volte lo stesso identificatore anche con significati diversi, purché in ambienti diversi Giorgio Giacinto 2010 Laboratorio di Informatica 28

Visibilità delle variabili modello a contorni g1,g2 Ambiente del main a,b Ambiente del blocco1 a,c d e d Ambiente globale Ambiente di f1 Ambiente del blocco2 Ambiente del blocco3 Elementi nell ambiente globale possono essere visti da tutte le funzioni e i blocchi Elementi nell ambiente locale di una funzione possono essere visti da tutti i blocchi contenuti nella funzione Gli elementi nell ambiente di un blocco possono essere visti da tutte le istruzioni nel blocco e dai blocchi in esso contenuti In caso di più definizioni dello stesso identificatore: è valida la definizione dell ambiente più vicino al punto di utilizzo Giorgio Giacinto 2010 Laboratorio di Informatica 29 Tempo di vita delle variabili! Creazione di una variabile allocazione in memoria dello spazio per la sua rappresentazione! Due categorie di variabili! Variabili fisse o statiche allocate una sola volta e vengono distrutte solo quando termina l esecuzione del programma (es. variabili globali del programma)! Variabili automatiche create ogni volta che si entra nel loro ambito di visibilità e che vengono distrutte all uscita da tale ambiente (es. variabili dichiarate a livello di funzione, procedura e blocco) Giorgio Giacinto 2010 Laboratorio di Informatica 30

Funzioni e procedure: uso di parametri di tipo array! Un array può essere passato a una funzione come parametro formale solo per indirizzo indirizzo di base dell array passato per valore alla funzione Esempio typedef double TipoArray[MaxNumElem] I seguenti prototipi di funzioni sono equivalenti double sum(double *a) double sum(double a[]) double sum(tipoarray a) Giorgio Giacinto 2010 Laboratorio di Informatica 31 Funzioni e procedure: uso di parametri di tipo array bidimensionali! Il passaggio di un array bidimensionale avviene con la seguente sintassi Esempio double Array[Righe][Colonne]; è un array contenente un numero di elementi pari a Righe, dove ciascun elemento è un array contenente un numero di elementi pari a Colonne I seguenti prototipi di funzioni sono equivalenti double sum(double a[righe][colonne]) double sum(double (*a)[colonne]) double sum(double a[][colonne]) Il parametro della funzione è cioè un puntatore ad un vettore i cui elementi sono array di double di dimensione pari a Colonne. Giorgio Giacinto 2010 Laboratorio di Informatica 32

Uso di parametri di tipo array in funzioni e procedure: osservazioni! Attenzione! Una funzione che agisce su un parametro array, agisce sempre sull originale, non su una copia!! Un array è sempre passato per indirizzo a una funzione! Nota bene: una funzione C non può mai restituire un array ma solo un puntatore a tale array Giorgio Giacinto 2010 Laboratorio di Informatica 33 Le standard library e Header file! In C esistono predefiniti molti sottoprogrammi di vasto uso che costituiscono la standard library resa disponibile al programmatore! La definizione delle funzioni che costituiscono la libreria sono disponibili come file di codice compilato, non leggibile direttamente dal programmatore! Gli header file contengono prototipi di funzioni di libreria (standard e non). Il programmatore che intende usare funzioni di libreria deve usare la direttiva #include Ad esempio: #include <stdio.h> Giorgio Giacinto 2010 Laboratorio di Informatica 34

Standard library del C stdio.h: funzioni per gestione ingresso uscita math.h: funzioni trigonometriche, esponenziali, logaritmiche, calcolo del valore assoluto stdlib.h: funzioni di utilità e gestione della memoria string.h: gestione di caratteri e di stringhe di caratteri Altri header per ricerca e ordinamento in array, gestione data e ora, generazione numeri casuali, comunicazione con l ambiente del sistema operativo e gestione dei fallimenti dei programmi a tempo di esecuzione Giorgio Giacinto 2010 Laboratorio di Informatica 35 Lettura di una stringa di caratteri con scanf! Lettura di una stringa di caratteri da stdin (ad es. parole separate da spazi o caratteri di newline) in un array char Word[MaxDimWord] scanf( %s,word)! Se l input è Calcolatore, l effetto di scanf è: Word[0]= C...Word[10]= e, Word[11]= \0! Il carattere speciale \0 indica la fine della parola nell array! considerato false nelle istruzioni condizionali Giorgio Giacinto 2010 Laboratorio di Informatica 36

Libreria string.h Alcune funzioni per manipolare stringhe di caratteri int strcmp(char *s1, char *s2); confronto fra due stringhe. Ritorna un intero maggiore, uguale o minore di zero a seconda che s1 sia alfabeticamente maggiore uguale o minore a s2. char *strcpy(char *s1, char *s2); copia s2 (compreso \0) in s1, sovrascrivendo il contenuto di s1 (non si controlla la dimensione di s1). Si restituisce il puntatore a s1. char *strcat(char *s1, char *s2); restituisce s1 che contiene la concatenazione fra s1 e s2 unsigned strlen(char *s); calcola la lunghezza di una stringa (escluso \0) Giorgio Giacinto 2010 Laboratorio di Informatica 37