Fread e file mancanti

di il
5 risposte

Fread e file mancanti

Salve,
ho trovato un problema con la fread, probabilmente e' una cosa semplice che nn riesco a capire .
FILE *fp;
	// Apertura stream lettura

	fp = fopen(operand, "rb");

	int size;

	fseek(fp, 0, SEEK_END);
	size = ftell(fp);
	rewind(fp);

	char *buffer = (char *)malloc(sizeof(char)*size);
	memset(buffer, 0, size);

	if(fp){
		int read = fread(buffer, sizeof(char), size, fp);
		printf("%d %s\n", read, buffer);
	}	
	else {
		printf("File NON presente!\n");
		return 1;
	}

	// Chiusura Stream lettura
	fclose(fp);

	free(buffer);
il risultato di questo codice e' questo:
size = valore corretto
read = valore corretto = size

buffer = 4 byte

sapete cosa sto' sbagliando? perche' leggo solo un pezzo cosi piccolo?

grazie anticipatamente per qualsiasi aiuto!

5 Risposte

  • Re: Fread e file mancanti

    Perche stai leggendo il file in binario e il quinto carattere letto é il terminatore di stringa.
  • Re: Fread e file mancanti

    Scusa ma non ho capito...se e' un file binario e mi dice che ha letto un tot di caratteri perche' poi me ne restituisce solo 4? se lo stessi stampando potrei capire che andrei a capo ma anche se redirigo su di un altro file il problema e' lo stesso.

    p.s. il problema si e' risolto mettendo al posto di un puntatore con la malloc un semplice array di una certa grandezza.
    Il dubbio sul perche' non funziona pero' mi rimane XD
  • Re: Fread e file mancanti

    Il tuo dubbio ti è stato spiegato chiaramente, ma forse non ti è chiaro.
    Come fai a fare una printf di una stringa binaria se questa si ferma al primo '\0' che incontra? spiegamelo!
  • Re: Fread e file mancanti

    ixamit ha scritto:


    Come fai a fare una printf di una stringa binaria se questa si ferma al primo '\0' che incontra? spiegamelo!
    Forse mi sto' spiegando male ma come ho gia' detto:

    solaris ha scritto:


    se lo stessi stampando potrei capire che andrei a capo ma anche se redirigo su di un altro file il problema e' lo stesso.
    forse e' questa la riga che puo' trarre' in inganno quindi la riscrivo:

    se stessi utilizzando una printf() potrei capire che andrei a capo appena trovo la codifica binaria di '\0' ma visto che lo redirigo su di un altro file con una fwrite() perche' il problema si verifica ugualmente?

    Se il problema dello '\0' esiste anche nella redirezione in un file allora spiegatemi come copiare un file binario in un altro posto.

    Grazie
  • Re: Fread e file mancanti

    se stessi utilizzando una printf() potrei capire che andrei a capo appena trovo la codifica binaria di '\0' ma visto che lo redirigo su di un altro file con una fwrite() perche' il problema si verifica ugualmente?
    Con la printf termini non vai a capo...

    Comunque sia per quello che devi fare si scrive più o meno così:
    
    ...
    while (!feof(fp_in))
    {
        if ( (nbytes=fread(buffer,1,CHUNK_SIZE,fp_in)) != CHUNK_SIZE)
            if (ferror(fp_in))
                fatalerror ("fread");
    
            if ( (fwrite(buffer,1,nbytes,fp_out)) != nbytes)
    	    fatalerror ("fwrite");
    }
    ...
    
Devi accedere o registrarti per scrivere nel forum
5 risposte