All pastes #512297 Raw Edit

max4ever

public c v1 · immutable
#512297 ·published 2007-05-26 20:53 UTC
rendered paste body
/*Scrivere un programma che si pone l'obiettivo di leggere e poi memorizzare una serie distringhe (non si sa quante) di lunghezza variabile, senza occupare memoria oltre quellanecessaria. Il programma acquisisce da input, all'inizio, il numero di stringhe che sivogliono memorizzare (0 se nessuna), e dovrà effettuare poi la memorizzazione solo diquelle richieste. Il programma inoltre, prima di acquisire da input ogni stringa, acquisirà,sempre da input, la lunghezza della stringa che segue, che deve essere comprensiva diterminatore. Se la stringa fornita è più lunga di quanto dichiarato, i caratteri in eccesso nondevono essere memorizzati. Per uscire si digiterà 0 alla richiesta della lunghezza.L’input del programma sarà quindi del tipo:<numero di stringhe><lunghezza della prima stringa><valore della prima stringa>…<lunghezza ultima stringa><valore ultima stringa>Si chiede di stampare alla fine del programma tutte e sole le stringhe memorizzate,prima di liberare la memoria.Non si può usare la funzione realloc(), né si possono utilizzare variabili conallocazione non fissa, ad esempio:{<leggi n>;char Stringa[n];}Sarà ulteriormente (e di molto) valutata la stesura dello stesso programma senzache si sappia da input il numero di stringhe da memorizzare. In questo, e solo inquesto, caso è ammessa la realloc().*/#include <stdio.h>#include <malloc.h>#include <string.h>int main (){    int i, y, str_len, x, n;    char *array, *mychar, c;    printf("Quante stringhe vuoi leggere :");    scanf("%d", &i);        array=(char *)malloc(sizeof(char *)*i);        for (y = 0; y < i; y++)        {             printf("Inserisci la lunghezza della stringa : ");            scanf("%d", &str_len);                       /*           Se la stringa fornita è più lunga di quanto dichiarato, i caratteri in eccesso non            devono essere memorizzati.                         come cazzo faccio?           */                 x = 0;            mychar =(char *)malloc(sizeof(char)*str_len);            getchar();            printf("Inserisci la stringa : ", str_len);            while ( ((c = getchar()) != '\n' ) && (x < str_len))                {                    mychar[x] = c;                    x++;                }            mychar[x]='\0';            array[y]=malloc(sizeof(char)*str_len);            strcpy(&array[y], mychar);        }    //stampo le stringhe salvate    for (y = 0; y < i; y++)        printf("La string %d `e : %s", (y+1), array[y]);    getch();    return 0;}