[C] funzione crasha quando restituisce una stringa

di
Anonimizzato21203
il
3 risposte

[C] funzione crasha quando restituisce una stringa

Salve, ho un problema con una funzione che dovrebbe restituire un array di caratteri. In pratica la funzione chiede in input una stringa e controlla se è formata solo da spazi o tab. Se lo è chiede di inserire nuovamente la parola, sennò dovrebbe restituire l'indirizzo del puntatore al array che poi vado a salvare in una stringa nel main. Al momento di resituire la parola nonformata solo da spazi però, il programma crasha. Sono quindi praticamente convinto che il problema sia su "return risp;" ma ho visto su svariati forum che per molti funziona questo tipo di return. Come posso risolvere il problema? Grazie in anticipo
PS: penso che lo capiate da soli, però ve lo dico: il tmp l'ho messo solo per poter iterare la funzione. La parola corretta dovrebbe essere sempre restituita da risp.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>

char *richiesta_stringa();
int strspc(char*);

int main(void) {
	char *mdl;
	char array[51];
	int i;

	printf("immeti parola: ");
	mdl=richiesta_stringa();
	for (i=0; i<strlen(mdl); ++i);
	array[i]=*(mdl+i);
	printf("%s",array);
}

int strspc(char *str){//restituisce 1 qualora la stringa sia di lunghezza 0 e 2 se è composta interamente da spazi o tabulazioni
	int c;
	size_t sl = strlen(str);
	if (!sl) return 1;
	for(c=0; c<(int) strlen(str); c++)
		if(!isspace(str[c])) return 0;
	return 2;
}

char *richiesta_stringa(){

	char *tmp;
	char risp[51];


	gets(risp);
	if(strspc(risp)!=0){
		printf("ERRORE 002: parola immessa non valida\nReinseriscila per favore: ");
		tmp=richiesta_stringa();
		return tmp;
	}
	return risp;
}

3 Risposte

  • Re: [C] funzione crasha quando restituisce una stringa

    Perché la funzione

    richiesta_stringa

    non è corretta. Non puoi restituire il puntatore ad una stringa locale alla funzione. Devi allocare dinamicamente la stringa e restituire il puntatore alla memoria allocata. Inoltre non ha senso chiamare la funzione dentro sé stessa ... semmai nel ciclo devi chiamare la gets.
  • Re: [C] funzione crasha quando restituisce una stringa

    Grazie mille. Ho allocato dinamicamente e ora funziona tutto. Dopo aver usato la funzione devo sempre fare free(risp) per liberare la memoria, giusto?
  • Re: [C] funzione crasha quando restituisce una stringa

    Si, è responsabilità del chiamante eseguire la free quando la stringa non serve più.
Devi accedere o registrarti per scrivere nel forum
3 risposte