Buongiorno,
visto che sono all'inizio con i programmi che contemplino la allocazione dinamica della memoria vorrei sapere se, secondo voi,il programma seguente è corretto, e se risponde effettivamente a quanto chiesto dall'esercizio (non ho la soluzione):
codice:
/*Scrivere un sottoprogramma che riceve come parametro una stringa. Il sotto-
programma alloca un'area di memoria della dimensione strettamente necessaria
a contenere la stringa stessa, copia la stringa ricevuta in ingresso all'interno di
tale area e la restituisce al chiamante.
Scrivere un programma che chiede all'utente una stringa di massimo 50 carat-
teri. Il programma richiama il sottoprogramma precedentemente denito, e
stampa la stringa da esso restituita e, prima di terminare, dealloca la memoria
allocata dinamicamente.*/
#include<stdio.h>
#include<stdlib.h>
typedef char *pointertype;
pointertype p;
pointertype f(char *a,int MAX);
int cont;

void main()
{int MAX=50;
char a[MAX];
int i,size;
printf("inserire stringa: ");
fgets(a,50,stdin);
cont=0;
for(i=0;i<MAX;i++)
{if(a[i]!='\n') cont++;
else break;}
p=f(a,MAX);
size=sizeof(p);
printf("Dimensione della allocazione: %d\n",size);
printf("Stringa:%s\n\n",p);
free(p);
p=NULL;
system("PAUSE");}

pointertype f(char *a,int MAX)
{int i;
typedef char *pointertype;
pointertype ris;
ris=(char*)malloc(sizeof(char)*(cont+1));
for(i=0;i<cont;i++)
ris[i]=a[i];
ris[cont]='\0';
return(ris);}
la cosa che non capisco, in particolare, è il fatto che come dimensione allocata mi restituisce sempre 4 , indipendentemente dalla stringa che digito...

grazie.