informatica:sol:laboratorio21:esercitazionib:esercitazione1
Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisioneRevisione precedenteProssima revisione | Revisione precedente | ||
informatica:sol:laboratorio21:esercitazionib:esercitazione1 [09/02/2021 alle 16:02 (4 anni fa)] – [Esercizio 1] Massimo Torquati | informatica:sol:laboratorio21:esercitazionib:esercitazione1 [19/02/2021 alle 08:23 (4 anni fa)] (versione attuale) – [Esercizio 2] Alessio Conte | ||
---|---|---|---|
Linea 2: | Linea 2: | ||
===== Esercizio 1 ===== | ===== Esercizio 1 ===== | ||
+ | |||
+ | Scrivere una funzione C che prende in input come primo argomento una stringa, come secondo argomento la lunghezza della stringa e restituisca nel terzo argomento la stessa stringa con tutti i sui caratteri in maiuscolo: | ||
+ | <code c> | ||
+ | void strtoupper(const char* in, size_t len, char* out); | ||
+ | </ | ||
+ | |||
+ | Scrivere il programma main di test per la funzione ' | ||
+ | |||
+ | ===== Esercizio 2 ===== | ||
Scrivere una funzione con nome ' | Scrivere una funzione con nome ' | ||
<code c> | <code c> | ||
- | const char *mystrcat(char* buffer, | + | char *mystrcat(char* buffer, |
</ | </ | ||
La funzione prende come parametri un buffer, la lunghezza del buffer in bytes ed almeno una stringa (il parametro formale ' | La funzione prende come parametri un buffer, la lunghezza del buffer in bytes ed almeno una stringa (il parametro formale ' | ||
Linea 17: | Linea 26: | ||
#include < | #include < | ||
- | # | + | const int REALLOC_INC=16; |
- | # | + | |
- | < | + | void RIALLOCA(char** |
- | + | < | |
+ | } | ||
char* mystrcat(char *buf, size_t sz, char *first, ...) { | char* mystrcat(char *buf, size_t sz, char *first, ...) { | ||
< | < | ||
Linea 26: | Linea 36: | ||
int main(int argc, char *argv[]) { | int main(int argc, char *argv[]) { | ||
- | if (argc != 7) { printf(" | + | if (argc < 7) { printf(" |
char *buffer=NULL; | char *buffer=NULL; | ||
- | RIALLOCA(buffer, | + | RIALLOCA(&buffer, REALLOC_INC); |
buffer[0]=' | buffer[0]=' | ||
buffer = mystrcat(buffer, | buffer = mystrcat(buffer, | ||
Linea 44: | Linea 54: | ||
| | ||
</ | </ | ||
- | |||
- | ===== Esercizio 2 ===== | ||
===== Esercizio 3 ===== | ===== Esercizio 3 ===== | ||
+ | Non utilizzando la funzioni di libreria ' | ||
+ | <code c> | ||
+ | -n < | ||
+ | </ | ||
+ | Il programma dovrà stampare le opzioni riconosciute con il relativo argomento. L' | ||
+ | <code c> | ||
+ | nome-programma -n < | ||
+ | </ | ||
+ | Se ci sono opzioni non riconosciute queste dovranno essere stampate a video | ||
+ | con il messaggio " | ||
+ | di libreria la funzione //strtol// (vedere man 3 strtol) | ||
+ | <code c> | ||
+ | long isNumber(const char* s) { | ||
+ | char* e = NULL; | ||
+ | long val = strtol(s, &e, 0); | ||
+ | if (e != NULL && *e == (char)0) return val; | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | | ||
+ | Testare il programma con i seguenti casi (supponiamo che l' | ||
+ | <code c> | ||
+ | cmdlineparsing -n 10 -m 11 -s 'ciao mondo' // tutte le opzioni sono riconosciute | ||
+ | cmdlineparsing -n 10 -h // deve stampare il messaggio di help | ||
+ | cmdlineparsing -n 10 -k 12 // k e' una opzione non riconosciuta | ||
+ | cmdlineparsing ----n 10 -s-s 'ciao mondo' | ||
+ | cmdlineparsing -n10 -m11 -s' | ||
+ | cmdlineparsing -n -m 11 // deve stampare un messaggio di errore per -n | ||
+ | </ |
informatica/sol/laboratorio21/esercitazionib/esercitazione1.1612886568.txt.gz · Ultima modifica: 09/02/2021 alle 16:02 (4 anni fa) da Massimo Torquati