Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    79

    [C++] Scrittura e Lettura non formattata da file

    Ho un problema riguardante queste due funzioni:

    codice:
    void Codifica( int esp, long long int mod )
    {
    	char CarCorrente;
    	string buf;
    
    	ifstream leggi(NomeFileIn);
    	ofstream scrivi(NomeFileOut);
    
    	while( (CarCorrente = leggi.get()) != EOF )
    	{
    		buf = llitos(CalcolaPotenza(CarCorrente, esp, mod));
    		scrivi.write(buf.c_str(), sizeof(long long int));
    	}
    }
    
    void Decodifica( int esp, long long int mod )
    {
    	long long int Corrente; /**< Variabile in cui è salvato il carattere corrente prelevato dal file*/
    	string buf;
    
    	ifstream leggi(NomeFileIn);
    	ofstream scrivi(NomeFileOut);
    	
    	bool eof = false;
    	while( !eof )
    	{
    		leggi.read(buf.c_str(), sizeof(long long int));
    
    		if ( leggi.eof() )
    			eof = true;
                    
                    Corrente = CalcolaPotenza(atoll(buf.c_str()), esp, mod);
                    buf = llitos(Corrente);
                    scrivi.write(Corrente.c_str(), sizeof(long long int));
    	}
    }
    Purtroppo mi da diversi errori in compilazione.. c'è qualcosa di sbagliato nella lettura/scrittura non formattata, ma non capisco cosa

    llitos, converte un long long int in una stringa
    atoll, fa il contrario
    CalcolaPotenza, ritorna un long long int

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Per sapere gli errori lo dobbiamo compilare?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    79
    Giusto, scusami.. ecco gli errori che mi da!

    make: *** [Funzioni.o] Errore 1
    gianluca@gianluca-VirtualBox:~/Scrivania/codifica-rsa/Sorgenti$ make
    g++ -Wall `pkg-config --cflags --libs gtk+-3.0` -rdynamic -c -o Funzioni.o Funzioni.cc
    Funzioni.cc: In function ‘void Decodifica(int, long long int)’:
    Funzioni.cc:213:48: error: invalid conversion from ‘const char*’ to ‘std::basic_istream<char>::char_type* {aka char*}’ [-fpermissive]
    In file included from /usr/include/c++/4.7/iostream:41:0,
    from Funzioni.cc:1:
    /usr/include/c++/4.7/istream:484:7: error: initializing argument 1 of ‘std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(std::basic_istream<_CharT, _Traits>::char_type*, std::streamsize) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_istream<_CharT, _Traits>::char_type = char; std::streamsize = int]’ [-fpermissive]
    Funzioni.cc:219:31: error: request for member ‘c_str’ in ‘Corrente’, which is of non-class type ‘long long int’

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    79
    codice:
    void Codifica( int esp, long long int mod )
    {
    	char CarCorrente; /**< Variabile in cui è salvato il carattere corrente prelevato dal file*/
    
    	ifstream leggi(NomeFileIn);
    	ofstream scrivi(NomeFileOut);
    
    	while( (CarCorrente = leggi.get()) != EOF )
    	{
    		scrivi.write(reinterpret_cast<char*>(CalcolaPotenza(CarCorrente, esp, mod)), sizeof(long long int));
    	}
    }
    
    void Decodifica( int esp, long long int mod )
    {
    	long long int Corrente; /**< Variabile in cui è salvato il carattere corrente prelevato dal file*/
    
    	ifstream leggi(NomeFileIn);
    	ofstream scrivi(NomeFileOut);
    
    	while( !leggi.eof() )
    	{
    		leggi.read(reinterpret_cast<char*>(Corrente), sizeof(long long int));
                    scrivi.write(reinterpret_cast<char*>(CalcolaPotenza(Corrente, esp, mod)), sizeof(long long int));
    	}
    }
    Ho provato a fare le seguenti modifiche, adesso si compila.. ma va in segmentation fault appena inizia l'esecuzione della funzione, non riesco proprio a capire

  5. #5
    reinterpret_cast (e in generale i cast tra puntatori incompatibili) non è praticamente MAI la risposta, stai semplicemente dicendo al compilatore di nascondere l'errore sotto il tappeto

    I dati che vuoi salvare li intendi salvare in formato testuale o in binario?
    Amaro C++, il gusto pieno dell'undefined behavior.

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.