Allocazioni dinamica di un array di stringhe

di il
24 risposte

24 Risposte - Pagina 2

  • Re: Allocazioni dinamica di un array di stringhe

    Comunque anche l'esempio che mi avete dato sopra a me non funziona
  • Re: Allocazioni dinamica di un array di stringhe

    Devi mostrare *tutto* il codice non solo il ciclo.

    Che intendi con "prendere la stringa per la funzione"?

    E cerca di capire che "non funziona" significa poco ... se non dai maggiori indicazioni non si sa cosa succede ...

    La cosa per cui avevi aperto il thread era l'allocazione dinamica dell'array ... questa va bene?
  • Re: Allocazioni dinamica di un array di stringhe

    Si scusami, l'allocazione funziona bene.
    Devo aprire un altro thread per la domanda sulle stringhe?
  • Re: Allocazioni dinamica di un array di stringhe

    Prova questo codice:
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_LENGTH 50
    
    void eliminaACapo(char *stringa)
    {
        if(stringa[strlen(stringa)-1] == '\n')
            stringa[strlen(stringa)-1] = '\0';
    }
    
    
    void cleanBuffer()
    {
        while(getchar()!='\n');
    }
    
    
    int main()
    {
        char **array_stringhe;
        char tmp[MAX_LENGTH];
        int numero_stringhe;
        int i;
    
        printf("Quante stringhe vuoi inserire? ");
        scanf("%d", &numero_stringhe);
        cleanBuffer();
    
        array_stringhe = malloc(numero_stringhe * sizeof(char *));
        for(i=0; i<numero_stringhe; i++)
        {
            array_stringhe[i] = malloc(MAX_LENGTH * sizeof(char));
        }
    
    
        for(i=0; i<numero_stringhe; i++)
        {
            printf("Inserisci stringa: ");
            fgets(tmp, MAX_LENGTH, stdin);
            eliminaACapo(tmp);
            strcpy(array_stringhe[i], tmp);
        }
    
        for(i=0; i<numero_stringhe; i++)
        {
            printf("[%d]:  %s\n", i, array_stringhe[i]);
        }
    
    
        return 0;
    }
    
    Soprattutto prova a leggerlo bene e vedere se c'è qualcosa che non ti è chiaro.

    A me funziona correttamente...
  • Re: Allocazioni dinamica di un array di stringhe

    Non capisco a cosa serve la funzione cleanBuffer comunque il codice funziona.

    Navigando in internet ho letto che fgets lavora male se si usa uno scanf prima, è vero?
  • Re: Allocazioni dinamica di un array di stringhe

    E' proprio a quello che serve la cleanBuffer... Quando inserisci il numero di stringhe che vuoi inserire digiti il numero e poi Invio. Il numero viene letto dalla scanf mentre l'Invio, cioè '\n', rimane nel buffer e crea problemi alla lettura successiva. Lo scopo della cleanBuffer è proprio quello di ripulire il buffer da quel '\n' che rimane.
  • Re: Allocazioni dinamica di un array di stringhe

    Perfetto
    Grazie mille a tutti
  • Re: Allocazioni dinamica di un array di stringhe

    La cleanbuffer è baggata! Bisogna controllare anche l'eof per eseguire un corretto purge dello stdin.
  • Re: Allocazioni dinamica di un array di stringhe

    Sì lo so, ma dato che la eseguo solo dopo una scanf non l'ho ritenuto indispensabile.
  • Re: Allocazioni dinamica di un array di stringhe

    Programmazione difensiva!
    Non è indispensabile è puramente obbligatorio.
    Dopotutto se ben chiamata la scanf non ha nemmeno bisogno del purge...
Devi accedere o registrarti per scrivere nel forum
24 risposte