Allocazioni dinamica di un array di stringhe

di Anonimizzato15657 il
24 risposte

24 Risposte - Pagina 2

  • Comunque anche l'esempio che mi avete dato sopra a me non funziona
  • 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?
  • Si scusami, l'allocazione funziona bene.
    Devo aprire un altro thread per la domanda sulle 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...
  • 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?
  • 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.
  • Perfetto
    Grazie mille a tutti
  • La cleanbuffer è baggata! Bisogna controllare anche l'eof per eseguire un corretto purge dello stdin.
  • Sì lo so, ma dato che la eseguo solo dopo una scanf non l'ho ritenuto indispensabile.
  • 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