View Single Post
Old 04-03-2010, 16:11   #5
-Ivan-
Senior Member
 
L'Avatar di -Ivan-
 
Iscritto dal: Mar 2003
Cittā: Rimini
Messaggi: 1842
Edit

Mi sto incasinando, non capisco perchč questo codice non funzioni, si blocca alla prima iterazione del ciclo while sul comando indicato nel codice. Tutta la lettura e scrittura del file funziona bene.
Credo sia una questione di allocazione della memoria.

Codice:
int main(int argc, char *argv[])
{
    FILE *source, *dest;
	int lettera=0, prec=0, readed=0;
	int buffer[10];
	int count=1, i=0, j=0;
	
	
	char *parola;
	
	
	source=fopen("c:\\files.txt", "r");
	dest=fopen("c:\\filed.txt", "w");
	
        readed=fread(buffer, 1, sizeof(char), source);

	while (readed>0)
	{
		/*leggo una lettera*/
		lettera=buffer[0];
		printf("%c", lettera);
		scrivi_lettera(lettera, buffer, &dest);//funzionante giā testata
		readed=fread(buffer, 1, sizeof(char), source);

            if((char)lettera==' ' || readed==0)
            {
            printf("\n parola letta:");
            for(j=0;j<i;j++)
            {
                 printf("%c", parola[j]);
            }
            printf("\n\n");
            i=0;
            free(parola);
            }
            if(lettera!=' ')
		{
            //allocazione dello spazio per contenere la lettera appena letta
		    parola = (char *)realloc(parola, (i+1)*sizeof(char));
            //memorizzazione della lettera che andrā a comporre la parola
			parola[i]=lettera; //SI BLOCCA QUI CREDO SIA UN PROBLEMA COLLEGATO ALLA REALLOC PRECEDENTE
			printf("%c", parola[i]);
			//incremento del contatore delle lettere che formano una parola
			i++;
	}
	fclose(source);
	fclose(dest);
	getchar();
}

Mentre questo che č un programma di prova che ho fatto funziona bene:
Codice:
int main(int argc, char *argv[])
{
    char a[4]={'a','b','c','d'};
    char *p=NULL;
    int i=0, j=0;
    int lettera='a';

    while(i<4)
    {
         p = (char *)realloc(p, (i+1)*sizeof(char));
         p[i]=lettera;
         printf("%c", p[i]);
         printf("\n");
         i++;
         lettera++;
    }
    printf("\n");
    for(j=0;j<i;j++)
    {         
         printf("%c", p[j]);
         printf("\n");
    }
    getchar();
}

Il secondo stampa a video "abcd" due volte come volevo che facesse.

Ultima modifica di -Ivan- : 04-03-2010 alle 16:39.
-Ivan- č offline   Rispondi citando il messaggio o parte di esso