[RISOLTO] Problema File e Allocazione Dinamica

di il
7 risposte

[RISOLTO] Problema File e Allocazione Dinamica

Salve a tutti, ho un problema con questo programma riguardante allocazione dinamica e file.
Il programma dovrebbe leggere da un file di input “stringhe.txt” 2 stringhe e
(attravero length e la funzione malloc o calloc) allocare lo spazio minimo necessario per poter
contenere la loro concatenazione.
Io ho scritto:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void lenght(char x[],int*n);

int main()
{
char *string = NULL;
char bozza[100];
int count=0;

FILE *input = NULL;
input = fopen("stringhe.txt","r");
while(fscanf(input,"%s",&bozza) == 1)
{
lenght(bozza,&count);
}
string=(char*)malloc(count*sizeof(char));
printf("%d",count);
return 0;
}

void lenght(char x[],int*n)
{
int i;

for(i=0;;i++)
{
if(x!='\0')
{
*n=*n++;
}
else break;
}
}

Ho aggiunto una printf per controllare che la variabile count si aggiorni correttamente in base alle stringhe in input, ma purtroppo mi rimane a 0!
Il file stringhe.txt l'ho salvato nella stessa cartella del programma ed è costituito da due parole separate da uno spazio.
Qualcuno sa dirmi dov'è l'errore?

7 Risposte

  • Re: [RISOLTO] Problema File e Allocazione Dinamica

    Ciao, onestamente non ho capito come dovrebbe funzionare lenght...
    Se ho capito bene tu vuoi che ad ogni iterazione del while quella funzione calcoli la lunghezza della stringa letta ( la variabile bozza) e aggiorni il valore della variabile count giusto?
    In tal caso, come mai non provi una soluzione di questo tipo?
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {
    char *string,bozza[100];
    int count;
    FILE *input;
    input = fopen("/home/sergio/file","r");
    if(input==NULL)
        {
        printf("Errore apertura file!\n");
        exit(1);
        }
    count=0;
    while((fscanf(input,"%s",bozza))==1)
        {
        printf("%s   lunghezza parola:%d\n",bozza,strlen(bozza));
        count+=strlen(bozza);
        }
    count++;    //incremento count di 1 per inserire il \0 finale
    string=malloc(count*sizeof(char));
    if(string==NULL)
        {
        printf("Impossibile allocare la stringa...\n");
        exit(1);
        }
    printf("%d",count);
    return 0;
    }

    EDIT:
    Ho provato a scrivere anche io una funzione simile alla tua, così non ho cambiato troppo il codice:
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    void lung(char string[],int *n);
    
    int main()
    {
    char *string,bozza[100];
    int count,somma;
    FILE *input;
    input = fopen("/home/sergio/file","r");
    if(input==NULL)
        {
        printf("Errore apertura file!\n");
        exit(1);
        }
    somma=count=0;
    while((fscanf(input,"%s",bozza))==1)
        {
        lung(bozza,&count);
        printf("%s   lunghezza parola:%d\n",bozza,count);
        somma+=count;
        }
    somma++;    //incremento somma di 1 per inserire il \0 finale
    string=malloc(count*sizeof(char));
    if(string==NULL)
        {
        printf("Impossibile allocare la stringa...\n");
        exit(1);
        }
    printf("%d",somma);
    return 0;
    }
    
    
    void lung(char string[],int *n)
    {
    int i=0;
    while(string && *string++)
    	{
        i++;
    	}
    *n=i;
    }
    
  • Re: [RISOLTO] Problema File e Allocazione Dinamica

    Con il tuo Edit hai risolto i miei ultimi dubbi, grazie infinite!
    TI voglio chiedere solo un'ultima cosa, l'inizializzazione di char bozza[100] è fondamentale per il prosieguo? Un vettore char quando viene dichiarato non viene inizializzato a zero?
  • Re: [RISOLTO] Problema File e Allocazione Dinamica

    Figurati, finché si può
    ( Prossima volta ricordati di inserire il codice tra la tag
     [code]
    [/code] così non perde l'indentazione)
    No, appena dichiarato dovrebbe contenere dei valori random, come per gli array contenenti numeri, però non ho capito la prima domanda...
    In che senso fondamentale per il prosieguo?
  • Re: [RISOLTO] Problema File e Allocazione Dinamica

    Ok|
    Fondamentale nel senso che se non si effettua, il programma non è in grado di contare la lunghezza del vettore perchè non inizializzato! Non so se mi sono spiegato
  • Re: [RISOLTO] Problema File e Allocazione Dinamica

    Beh non credo sia un problema perché tanto poi dentro bozza ci ritrovi le varie stringhe lette con la fscanf ad ogni iterazione del while, quindi non serve inizializzarla credo e a me sembra funzionare correttamente così infatti...
  • Re: [RISOLTO] Problema File e Allocazione Dinamica

    Stupido, avevo sbagliato l'assegnamento del puntatore!

    Errori da dilettante
    Ti ringrazio tantissimo per la tua pazienza
  • Re: [RISOLTO] Problema File e Allocazione Dinamica


    Di niente, buon lavoro ( e buona fortuna) col C
Devi accedere o registrarti per scrivere nel forum
7 risposte