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

    c aiuto per inesperto fwrite fread

    ho iniziato oggi a leggere qualcosa sul c ed è il mio primo approccio alla programmazzione quindi premetto che sono completamente ignorante in questo campo

    dopo migliardi di errori sono riuscito a compilare questo codice (tra laltro copiato quasi completamente da internet) con gcc
    dovrebbe leggermi un file nella stessa cartella del' eseguibile e crearmene una copia in codice binario (molto probabilmente ho sbagliato tutto) solo che quando lancio l'eseguibile con./ mi dice bus error e mi crea un kfileuscita vuoto.
    Qualcuno mi puo aiutare? Vi ringrazio in anticipo per le risposte.


    #include <stdio.h>

    #define kfileingresso "input.txt"
    #define kfileuscita "output.dat"



    int main (void)

    {


    int ca[6];

    FILE *fp_in;

    FILE *fp_out;

    int i;



    fp_in = fopen ("kfileingresso", "rb");



    fp_out = fopen ("kfileuscita", "wb");



    while (1)

    {

    i = fread (ca, 2000, 6, fp_in);


    if (i == 0)

    {
    printf("bo");

    break;
    }



    fwrite (ca, 1000, 6, fp_out);



    }



    fclose (fp_in);

    fclose (fp_out);



    return 0;

    }

  2. #2
    Così ad occhio direi che ci sono diverse cose da aggiustare...
    codice:
    #include <stdio.h>
    
    #define kfileingresso "input.txt"
    #define kfileuscita "output.dat"
    
    int main (void)
    {
        unsigned char buffer[1024];
        FILE *fp_in;
        FILE *fp_out;
        int readBytes=-1;
        int exitCode=0;
        fp_in = fopen ("kfileingresso", "rb");
        if(fp_in==NULL)
        {
            fprintf(stderr,"Impossibile aprire il file d'ingresso.\n");
            return 1;
        }
        fp_out = fopen ("kfileuscita", "wb");
        if(fp_out==NULL)
        {
            fprintf(stderr,"Impossibile aprire il file d'uscita.\n");
            return 2;
        }
        for(;;)
        {
            readBytes = fread (buffer, 1, sizeof(buffer), fp_in);
            if(readBytes == 0)
            {
                puts("Copia terminata.");
                break;
            }
            fwrite(buffer, 1, readBytes, fp_out);
            if(ferror(fp_out))
            {
                fprintf(stderr,"Errore di scrittura.\n");
                exitCode=3;
                break;
            }
        }
        fclose (fp_in);
        fclose (fp_out);
        return exitCode;
    }
    dovrebbe leggermi un file nella stessa cartella del' eseguibile e crearmene una copia in codice binario
    Mah, non so cosa tu intenda dire per "copia in codice binario", di fatto il programma te ne crea una copia esatta.
    ho iniziato oggi a leggere qualcosa sul c ed è il mio primo approccio alla programmazzione quindi premetto che sono completamente ignorante in questo campo

    dopo migliardi di errori sono riuscito a compilare questo codice (tra laltro copiato quasi completamente da internet) con gcc
    Sappi che questo è il peggior metodo possibile per imparare un linguaggio di programmazione. Comprati un libro di C.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    grazie mille per la risposta
    sicuramente mi comprero un libro sul c mi ero letto qualcosa su internet tanto per capire di cosa si parlava
    con restituirmi una copia in codice binario intendevo che mi creasse un file di testo dove vedevo ogni singolo bit del file che aprivo cmq per ora ci rinuncio e mi leggo prima un bella guida, ne aprofitto per domandarti se ai qualche titolo da cosigliarmi
    ho provato con il codice corretto da te e mi dice: impussibile aprire il file d'ingresso
    per quanto rigurda il link che ai postato nn capisco perchè ma nn lo apre

  4. #4
    Originariamente inviato da filippom22
    con restituirmi una copia in codice binario intendevo che mi creasse un file di testo dove vedevo ogni singolo bit del file che aprivo
    Allora devi convertire ogni carattere in una sequenza di 1 e di 0.
    cmq per ora ci rinuncio e mi leggo prima un bella guida, ne aprofitto per domandarti se ai qualche titolo da cosigliarmi
    Non saprei, ho sempre studiato C++ e mai C; in ogni caso se cerchi nel forum ci sono diversi consigli utili a proposito.
    ho provato con il codice corretto da te e mi dice: impussibile aprire il file d'ingresso
    Sei sicuro che il file in questione esiste?
    per quanto rigurda il link che ai postato nn capisco perchè ma nn lo apre
    Non l'ho postato direttamente, è la mia "firma" che viene aggiunta in fondo ad ogni post. È uno stupido scherzo per quelli che non hanno una guida cartacea; se clicchi effettui il logout dal forum.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    HAHAHA e io che continuavo imperterrito a cliccarci
    grazie ancora per l'aiuto
    cmq si il file esiste ed è nella stessa cartella dell eseguibile

  6. #6
    Trovato il problema: nelle fopen hai messo delle virgolette di troppo; non deve essere così
    codice:
        fp_in = fopen ("kfileingresso", "rb");
    ma così
    codice:
        fp_in = fopen (kfileingresso, "rb");
    , visto che le virgolette le hai già specificate nei #define all'inizio. In ogni caso ti consiglio di usare come nomi di macro solo nomi tutti maiuscoli come da convenzione universalmente diffusa, in modo da poterle riconoscere al volo. Quindi il tuo programma diventa così:
    codice:
    #include <stdio.h>
    
    #define KFILEINGRESSO "input.txt"
    #define KFILEUSCITA "output.dat"
    
    int main (void)
    {
        unsigned char buffer[1024];
        FILE *fp_in;
        FILE *fp_out;
        int readBytes=-1;
        int exitCode=0;
        fp_in = fopen (KFILEINGRESSO, "rb");
        if(fp_in==NULL)
        {
            fprintf(stderr,"Impossibile aprire il file d'ingresso.\n");
            return 1;
        }
        fp_out = fopen (KFILEUSCITA, "wb");
        if(fp_out==NULL)
        {
            fprintf(stderr,"Impossibile aprire il file d'uscita.\n");
            return 2;
        }
        for(;;)
        {
            readBytes = fread (buffer, 1, sizeof(buffer), fp_in);
            if(readBytes == 0)
            {
                puts("Copia terminata.");
                break;
            }
            fwrite(buffer, 1, readBytes, fp_out);
            if(ferror(fp_out))
            {
                fprintf(stderr,"Errore di scrittura.\n");
                exitCode=3;
                break;
            }
        }
        fclose (fp_in);
        fclose (fp_out);
        return exitCode;
    }
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    grazie mille ora ti confermo che funziona perfettamente.
    ciao filippo

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 © 2025 vBulletin Solutions, Inc. All rights reserved.