Strumenti Utente

Strumenti Sito


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

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki