informatica:sol:laboratorio21:esercitazionib:esercitazione1
Questa è una vecchia versione del documento!
Esercitazione 1 (ripasso C)
Esercizio 1
Scrivere una funzione con nome 'mystrcat' con il seguente prototipo:
const char *mystrcat(char* buffer, int buffer_size, char *prima, ...);
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. ATTENZIONE alla gestione della memoria!
Utilizzare il seguente main per testare il codice scritto:
#include <stdarg.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #define REALLOC_INC 16 #define RIALLOCA(buf, newsize) \ <inserire il codice per riallocare buf alla nuova size newsize> char* mystrcat(char *buf, size_t sz, char *first, ...) { <implementare il codice che se necessario chiamerà RIALLOCA> } int main(int argc, char *argv[]) { if (argc != 7) { printf("troppi pochi argomenti\n"); return -1; } char *buffer=NULL; RIALLOCA(buffer, REALLOC_INC); // macro che effettua l'allocazione del 'buffer' 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); printf("%s\n", buffer); free(buffer); return 0; }
NOTA: Che cosa può succedere se invece di
printf("%s\n", buffer);
si fosse scritto:
printf("%s\n", mystrcat(buffer, 16, "prima stringa", "seconda", "terza molto molto molto lunga", "quarta", "quinta lunga", "ultima!",NULL));
informatica/sol/laboratorio21/esercitazionib/esercitazione1.1612886488.txt.gz · Ultima modifica: 09/02/2021 alle 16:01 (4 anni fa) da Massimo Torquati