Questa è una vecchia versione del documento!
Esercitazione 2
Stringhe e libreria standard di IO, creazione di librerie statiche.
Cercare di completare tutti gli esercizi durante le ore di laboratorio e nel caso come homework.
Esercizio 1: tokenizer
Scrivere un programma che data una stringa come argomento, stampi a video ('stdout') le parole contenute nella stringa in input una per linea. Usare la funzione di libreria 'strtok'. Per realizzare il programma implementare la funzione 'tokenizer' con la seguente segnatura:
void tokenizer(char *stringa, FILE *out);
Testare il programma con i seguenti casi (supponiamo che l'eseguibile si chiami es1):
./es1 "ciao mondo" ./es1 ./es1 "questa e' una stringa di alcune parole!" ./es1 questa è un\'altra stringa
Esercizio 2: tokenizer_r
Scrivere una seconda versione del programma precedente che implementa la funzione 'tokenizer_r' che ha la stessa identica interfaccia ma che utilizza al suo interno 'strtok_r'. Quali sono le principali differenze tra 'tokenizer' e 'tokenizer_r' ? (Suggerimento: partire dall'analisi accurata del 'man' di 'strtok_r').
NOTA: se si compila con '-std=c99' per evitare il warning implicit declaration of function 'strtok_r'…
aggiungere la seguente opzione di compilazione '-D_POSIX_C_SOURCE=199309L'.
Esercizio 3
Inserire nel file 'tokenizer.h' l'interfaccia delle due funzioni 'tokenizer' e 'tokenizer_r' come descritte precedentemente. Inserire nel file 'tokenizer.c' l'implementazione delle due funzioni. Creare quindi una librerie statica 'libtokenizer.a' e riscrivere il programma dell'esercizio precedente in modo che il programma main includa il file 'tokenizer.h' e linki la libreria.