Fread e file mancanti

di Anonimizzato9958 il
5 risposte
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

  • Perche stai leggendo il file in binario e il quinto carattere letto é il terminatore di stringa.
  • 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
  • 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!
  • 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
  • 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