Strumenti Utente

Strumenti Sito


informatica:sol:laboratorio21:esercitazionib:esercitazione1

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
informatica:sol:laboratorio21:esercitazionib:esercitazione1 [09/02/2021 alle 18:37 (4 anni fa)] Massimo Torquatiinformatica:sol:laboratorio21:esercitazionib:esercitazione1 [19/02/2021 alle 08:23 (4 anni fa)] (versione attuale) – [Esercizio 2] Alessio Conte
Linea 3: Linea 3:
 ===== Esercizio 1 ===== ===== Esercizio 1 =====
  
-Scrivere una funzione C che prende in input come primo argomento una stringa e restituisce nel secondo argomento la stessa stringa con tutti i sui caratteri in maiuscolo:+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> <code c>
-void strtoupper(const char* in, char** out); +void strtoupper(const char* in, size_t len, char* out); 
-</code+</code
  
-Scrivere il programma main di test per la funzione 'strtoupper'.+Scrivere il programma main di test per la funzione 'strtoupper' che prende la/le stringa/e da passare alla funzione come argomenti da linea di comando. Per convertire una lettera in maiuscolo si può usare 'toupper' (man 3 toupper).
  
 ===== Esercizio 2 ===== ===== Esercizio 2 =====
Linea 14: Linea 14:
 Scrivere una funzione con nome 'mystrcat' con il seguente prototipo: Scrivere una funzione con nome 'mystrcat' con il seguente prototipo:
 <code c> <code c>
-const char *mystrcat(char* buffer, int buffer_size, char *prima, ...);+char *mystrcat(char* buffer, size_t buffer_size, char *prima, ...);
 </code> </code>
 La funzione prende come parametri un buffer, la lunghezza del buffer in bytes ed almeno una stringa (il parametro formale 'prima'). Le stringhe possono essere in numero variabile (>1). La funzione concatena tutte le stringhe passate come argomento all'interno del 'buffer' e ritorna il buffer stesso. La funzione prende come parametri un buffer, la lunghezza del buffer in bytes ed almeno una stringa (il parametro formale 'prima'). Le stringhe possono essere in numero variabile (>1). La funzione concatena tutte le stringhe passate come argomento all'interno del 'buffer' e ritorna il buffer stesso.
Linea 26: Linea 26:
 #include <stdlib.h> #include <stdlib.h>
  
-#define REALLOC_INC 16 +const int REALLOC_INC=16; 
-#define RIALLOCA(buf, newsize) \ + 
-    <inserire il codice per riallocare buf alla nuova size newsize>  +void RIALLOCA(char** buf, size_t newsize) { 
-     +  <inserire il codice per riallocare buf alla nuova size newsize>  
 +    
 char* mystrcat(char *buf, size_t sz, char *first, ...) { char* mystrcat(char *buf, size_t sz, char *first, ...) {
   <implementare il codice che se necessario chiamerà RIALLOCA>   <implementare il codice che se necessario chiamerà RIALLOCA>
Linea 35: Linea 36:
            
 int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
-  if (argc != 7) { printf("troppi pochi argomenti\n"); return -1; }+  if (argc 7) { printf("troppi pochi argomenti\n"); return -1; }
   char *buffer=NULL;   char *buffer=NULL;
-  RIALLOCA(buffer, REALLOC_INC);  // macro che effettua l'allocazione del 'buffer'+  RIALLOCA(&buffer, REALLOC_INC);  // macro che effettua l'allocazione del 'buffer'
   buffer[0]='\0'; // mi assicuro che il buffer contenga una stringa   buffer[0]='\0'; // mi assicuro che il buffer contenga una stringa
   buffer = mystrcat(buffer, REALLOC_INC, argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], NULL);   buffer = mystrcat(buffer, REALLOC_INC, argv[1], argv[2], argv[3], argv[4], argv[5], argv[6], NULL);
Linea 66: Linea 67:
 Se ci sono opzioni non riconosciute queste dovranno essere stampate a video Se ci sono opzioni non riconosciute queste dovranno essere stampate a video
 con il messaggio "opzione X non riconosciuta". Per convertire le stringhe in interi usare la funzione con il messaggio "opzione X non riconosciuta". Per convertire le stringhe in interi usare la funzione
-di libreria la funzione //strtol// (vedere man 3 strtol)  ad esempio nel modo seguente:+di libreria la funzione //strtol// (vedere man 3 strtol)  ad esempio nel modo seguente (ATTENZIONE: non gestisce overflow/underflow nella conversione):
 <code c> <code c>
 long isNumber(const char* s) { long isNumber(const char* s) {
informatica/sol/laboratorio21/esercitazionib/esercitazione1.1612895854.txt.gz · Ultima modifica: 09/02/2021 alle 18:37 (4 anni fa) da Massimo Torquati

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki