Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    C Scrittura appesa file, carattere '˙'

    Salve ragazzi l'esercizio da fare è il seguente:

    Scrivere un programma che prende come argomenti del main i nomi di due file di testo e appende il contenuto del secondo file al primo file. Ad esempio, se il primo file contiene Testo primo file e il secondo file contiene Testo secondo file allora il programma modifica il primo file così Testo primo fileTesto secondo file.
    Il codice che ho scritto fa quanto richiesto(almeno dai test che ho fatto) ma aggiunge pure uno strano carattere alla fine del primo file, questo: ˙
    Sapete dirmi il perchè?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    char* leggilinea( FILE* fsecondo, char* line ) {
    	int n = 0, c;
    	do {
    		c = fgetc( fsecondo );
    		line = realloc( line, sizeof(char)*(n+1) );
    		line[n++] = c;
    	}while( c != EOF );
    	if( line != NULL ) {
    		line = realloc( line, sizeof(char)*(n+1) );
    		line[n++] = '\0';
    	}
    	return line;
    }
    
    int main( int argc, char* argv[] ) {
    	FILE* fprimo 	= fopen( argv[1], "a" );
    	FILE* fsecondo 	= fopen( argv[2], "r" );
    	if( fprimo == NULL || fsecondo == NULL ) {
    		printf( "Errore nell'apertura files\n" );
    		return 0;
    	}
    	
    	char* line = NULL;
    	line = leggilinea( fsecondo, line );
    	
    	fprintf( fprimo, "%s", line );
    	free( line );
    	fclose(fprimo);
    	fclose(fsecondo);
    	
    	return 0;
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Rivedi la funzione in questo modo

    codice:
    char* leggilinea( FILE* fsecondo, char* line ) {
    	
    	int n = 0, c;
    
    	while((c = fgetc(fsecondo)) != EOF)
    	{
    		line = (char *)realloc(line, sizeof(char)*(n+1));
    		line[n++]=(char)c;
    	}
    
    	if( line ) {
    		line = (char *)realloc( line, sizeof(char)*(n+1) );
    		line[n] = '\0';
    	}
    
    	return line;
    }
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Davvero gentile, osservando la tua funzione mi sono accorto dell'errore!
    Ovviamente la tua funzione è piu efficente e bella ma vorrei provare a correggere quella mia.
    Cosi, facendo qualche prova, il programma funziona, mi confermi che ora è corretta?
    codice:
    char* leggilinea( FILE* fsecondo, char* line ) {
    	int n = 0, c;
    	do {
    		c = fgetc( fsecondo );
    		if( c != EOF ) {
    			line = realloc( line, sizeof(char)*(n+1) );
    			line[n++] = c;
    		}
    	}while( c != EOF );
    	if( line != NULL ) {
    		line = realloc( line, sizeof(char)*(n+1) );
    		line[n++] = '\0';
    	}
    	return line;
    }
    Grazie ancora!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sì, hai capito che il problema era causato dalla memorizzazione dell'EOF (quel carattere è in ASCI il valore FF parte del codice dell'EOF)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Perfetto grazie ancora del supporto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.