Esercizio 1 Si scriva una funzione che riceva in ingresso una stringa s (puntatore a char) e restituisca Ø una nuova stringa uguale alla seconda metà di s, se s ha lunghezza pari Ø una nuova stringa contenente tutti i caratteri di s tranne il primo e l’ultimo, altrimenti. Si assuma che la stringa s abbia sempre lunghezza pari o maggiore di 3.
Esercitazione 4 2013/2014 Pagina 2
Esempio Esecuzione Esercizio 1 s = “informatica” Valore da restituire s’ = “nformatic”
s = “matematica” Valore da restituire s’ = “atica”
Esercitazione 4 2013/2014 Pagina 3
Esercizio 2 Scrivere un programma ext che prenda in input da riga di comando il nome di un file in formato <nome>.<estensione> e stampi a video l’estensione di tale file. Si assuma che l’input sia sempre nel formato corretto e che <nome> possa contenere il carattere ‘.’ al suo interno. Esempi >ext mio.file.txt txt >ext appunti.doc doc Esercitazione 4 2013/2014 Pagina 4 Esercizio 3 /* 1*/#include <stdio.h> 1. La riga 9 stampa 3 /* 2*/#include <string.h> 2. La riga 10 stampa 4 /* 3*/ 3. La riga 13 stampa Artemoderna /* 4*/int main() { 4. La riga 14 stampa e /* 5*/ char c[80] = "art"; 5. L’output del programma è /* 6*/ char* d = "moderna"; 3 /* 7*/ char* e = c; 2 /* 8*/ *(e++) = 'A'; Artmoderna /* 9*/ printf("%d\n", strlen(c)); e /*10*/ printf("%d\n", strlen(e)); /*11*/ *(e+1) = 'e'; /*12*/ strcat(c, d); /*13*/ printf("%s\n", c); /*14*/ printf("%c\n", *(++e)); /*15*/ return 0; /*16*/}
Esercitazione 4 2013/2014 Pagina 5
Esercizio 4 /* 1*/#include <stdio.h> /* 2*/#include <string.h> 1. La riga 9 stampa 20 /* 3*/ 2. La riga 9 produce un /* 4*/int main() { buffer overflow /* 5*/ int arr[20], *p, i; 3. La riga 11 stampa 1 /* 6*/ p = arr; 4. La riga 13 stampa 0 /* 7*/ for (i=0; i < 20; i++) 5. La riga 14 stampa 0 /* 8*/ arr[i] = i; 6. La riga 15 stampa 1 /* 9*/ printf("%d\n", *(p+5)+15); 7. La riga 16 stampa 1 /*10*/ int flag = *(++p); /*11*/ printf("%d\n",flag); /*12*/ char s[20] = "ciao"; /*13*/ printf("%d\n", strcmp("ciao",s)); /*14*/ printf("%d\n", strcmp(s,"ciao")); /*15*/ printf("%d\n",strcmp("ciao",s)&&(flag=strcmp(s,"ciao"))); /*16*/ printf("%d\n",flag); /*17*/ return 0; /*18*/} Esercitazione 4 Pagina 6 2013/2014