Problemi Vettori di Stringhe

di il
4 risposte

Problemi Vettori di Stringhe

Ciao, sto avendo problemi nel caricamento di un vettore di stringhe. La stringa è dichiarata come tipo char*, il vettore invece deve essere char**.
Il codice che ho scritto funziona ma dopo la seconda stringa inserita nel vettore, qualunque sia sua dimensione, l'esecuzione crasha. Qualcuno sa spiegarmi il perchè?

Le due funzioni sono:

stringa InserireStringa()
{	printf("Inserire una stringa (con meno di %d caratteri) e al suo termine prememere invio \n", COSTANTEALLOCAMENTO);
	stringa str=(stringa)malloc(COSTANTEALLOCAMENTO*sizeof(stringa));
        scanf(" %s", str);
	int lun=strlen(str);
	if (lun+1<COSTANTEALLOCAMENTO) RiallocareMemoriaStringa(str,lun+1);

return str;
}

stringa* CaricamentoVettore()
{	int dim;
	printf("Inserire la dimensione del vettore=\n");
	scanf("%d", &dim);
	stringa*VStr;

	VStr=(stringa*) malloc((dim+1)*sizeof(stringa*));

 int i=0;
 while (i<dim)
 { stringa s=InserireStringa();
   printf("la stringa inserita è: %s \n", s);  //controllo dell'inserimento della stringa
   strcpy(*(VStr+i),s);
   printf("la stringa inserita è: %s \n", *(VStr+i));  //controllo dell'inserimento nel vettore
   i=i+1;
 }
 
 return VStr;}
 

4 Risposte

  • Re: Problemi Vettori di Stringhe

    Che cosa e' 'stringa'?

    (che non e' 'string'! )
  • Re: Problemi Vettori di Stringhe

    EDIT:
    Giusto per non passare per pazzo!

    --------------------------------------------------------------
    @migliorabile scusa ma dove le vedi le std::string?!

    @Idk123Idk presumo tu abbia omesso un
    typedef char* stringa;
    giusto?
    In tal caso un grave errore sta già nell'allocazione dinamica della singola stringa.
    In ogni caso ci sarebbero molte altre cose da dire, se riesco lo faccio domani.
  • Re: Problemi Vettori di Stringhe

    Nippolo ha scritto:


    @migliorabile scusa ma dove le vedi le std::string?!

    @Idk123Idk presumo tu abbia omesso un
    typedef char* stringa;
    giusto?
    In tal caso un grave errore sta già nell'allocazione dinamica della singola stringa.
    In ogni caso ci sarebbero molte altre cose da dire, se riesco lo faccio domani.
    Si, quel typedef c'è all'inizio del codice.
    Riguardo l'allocazione, mi è chiesto esplicitamente dall'esercizio di allocare sia il vettore sia ogni singola stringa dinamicamente, per questo ho fatto questa scelta.
  • Re: Problemi Vettori di Stringhe

    L'input della stringa la fai semplicemente con
    
    	printf("Inserire una stringa (con meno di %d caratteri) e al suo termine prememere invio \n", COSTANTEALLOCAMENTO);
    	stringa str = (stringa)malloc(COSTANTEALLOCAMENTO * sizeof(char));
    	scanf("%s", str);
    	return str;
    
    e tutti i controlli che fai non sono corretti e anche inutili.

    Per l'allocazione del vettore, sbagli il tipo del sizeof che deve essere stringa e non stringa * oltre al fatto che non ha senso allocare un elemento in più.
    Inoltre l'allocazione stessa non ha alcuna necessità di usare una stringa intermedia con relativa copia, quindi
    
    	VStr = (stringa*)malloc(dim * sizeof(stringa));
    
    	int i = 0;
    	while (i<dim)
    	{
    		VStr[i] = InserireStringa();
    		printf("la stringa inserita è: %s \n", VStr[i]);  
    		i = i + 1;
    	}
    
Devi accedere o registrarti per scrivere nel forum
4 risposte