Salve, ho una domanda su dove usare free() quando allochiamo dinamicamente un'array in una funzione. Praticamente ho creato questa funzione che acquisisce una stringa, fa dei controlli e poi restituisce il puntatore che punta alla stringa allocata dinamicamente.
char *richiesta_stringa(){
char *risp=malloc(51);
char tmp[52];//stringa dove effettuerò il controllo
fgets(tmp, 52, stdin);//salva i primi 51 caratteri inseriti in tmp
printf("|%s|\n%d\n", tmp, strlen(tmp));
printf("%c\n", tmp[strlen(tmp)-1]);
if(tmp[strlen(tmp)-1]=='\n'){//se l'ultimo carattere è il \n lo fa diventare \0. devo eliminare il \n perchè se fossero stati inseriti esattamente 50 caratteri si avrebbe l'array [50char][\n][\0] e si avrebbe strlen(tmp)>50 anche se non è vero
printf("%c\n|%s|\n", tmp[strlen(tmp)-1], tmp);
tmp[strlen(tmp)-1]='\0';
}
if(strlen(tmp)>50){//potrei scrivere semplicemente else perchè se \n è presente in tmp vuol dire che ci sono al massimo 5o caratteri
printf("ERRORE 004: parola immessa troppo lunga\nReinseriscila per favore: ");
while(getchar()!='\n');//assorbe tutti i caratteri rimasti nel buffer fino a quando non incontra \n
risp=richiesta_stringa();
return risp;
}
strcpy(risp, tmp);
if(strspc(risp)!=0){//la stringa inserita è vuota o composta solo da spazi e tabbature
printf("ERRORE 002: parola immessa non valida\nReinseriscila per favore: ");
risp=richiesta_stringa();
return risp;
}
return risp;
}
strspc() è una funzione che controlla se la stringa è vuota ocomposta solo da spazi.
La domanda è: dove devo inserire free(risp) all'interno del codice?
grazie in anticipo