Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - segmentation fault
Forum - C/C++ - segmentation fault

Avatar
campo (Normal User)
Newbie


Messaggi: 1
Iscritto: 25/09/2006

Segnala al moderatore
Postato alle 0:19
Lunedì, 25/09/2006
Salve gente ho un errore che non riesco proprio a trovare.
Qualche premessa: sono niubbo e di c sò pochissimo. Il prog dovrebbe frmi vedere i bit dei caratteri di un file di testo il  problema che mi dà un segmentation fault che non riesco a sistemare.
posto di seguito il sorgente. (non sò se funzia come dovrebbe). Ci sono anche degli step per cercare di vedere l'errore ma io non lo trovo.


#include "stdio.h"
#include "stdlib.h"


long int pot_2(int j)
{
        int k=0;
        long int ris=1;
        if (j==0){
//              printf("Stò tornando 1 \n");
                return(1);
        }
        else {
                for(k=0; k<j; k++){
                        ris=ris*2;
//                      printf("Stò tornando %d \n",ris);
                }
                return(ris);
        }
}


main(argc,argv)
int argc;
char *argv[];
{
        int arr_bit[15];
        FILE *fp;
        char car;
        char buf_tex;
        char car_tmp;
        int num_1;
        int num_2;
        int num;
        int num_tmp;
        double temp=0;
        int i=0;
        int t=0;
        printf("Inserire due numeri \n");
        scanf("%d",&num_1);
        scanf("%d",&num_2);
        fp=fopen("prova.txt","rb");
        printf("Step 1 \n");
//      buf_tex=malloc(sizeof(char));
//      for(t=0;t<6;t++) {
        while(!(feof(fp))) {
                if (ferror(fp)) {
                        printf("Riscontrato errore durante l'accesso al file \n");
                        exit(1);
                }
                fread(&buf_tex,sizeof(char),1,fp);
                printf("Il carattere %c e\' formato da qst bit : ",buf_tex);
                for(i=0;i<8;i++) {
                        if ( pot_2(i) & (buf_tex) ) {
                                arr_bit[7-i]=1;
                        }
                        else {
                                arr_bit[7-i]=0;
                        }
                }
                for (i=0 ; i < 8; i++) {
                        printf("%d ",arr_bit);
                }
                printf("\n");
        }

//      free(buf_tex);

        printf("Step 2 \n");
        printf("Step 3 \n");
        i=0;
        for(i=0;i<16;i++){
                if ( pot_2(i) & num_1 ) {
                        arr_bit[15-i]=1;
                }
                else {
                        arr_bit[15-i]=0;
                }
                printf(" %d \n",i);
        }
        printf("Step 4 \n");
        i=0;
        for(i=0 ; i<16;i++){
                printf("%d ", arr_bit );
        }
        printf("\nStep 5 \n");
        printf("Step 6 \n");
        rewind(fp);
        printf("Step 7 \n");
        if (ferror(fp)) {
                printf("Errore durante l\'accesso al file \n");
                exit(1);
        }
        printf("Step 8 \n");
        fread(&buf_tex,sizeof(char),1,fp);
        printf("Step 9 \n");
        printf("Cambiando il bit meno significativo di %c ottengo : %c",buf_tex,car_tmp );
        close(fp);
        printf("\n L\' And logico tra %d e %d è : %d \n",num_1,num_2,num);
        printf(" 2 alla 7 = %d \n",pot_2(7));
        printf("2 alla 0 = %d \n",pot_2(0));
}

Trovato l'errore è nell'array grazie lo stesso e ciao

Ultima modifica effettuata da campo il 25/09/2006 alle 0:46
PM Quote
Avatar
### (Normal User)
Rookie


Messaggi: 44
Iscritto: 07/09/2006

Segnala al moderatore
Postato alle 17:47
Lunedì, 25/09/2006

Non ho capito bene quello che vuoi fare, se vuoi stampare a console i bit in gruppi da 8 dei singoli caratteri di un file... beh quel codice mi sembra un pò troppo lunghetto, io risolverei così:

Codice sorgente - presumibilmente C++

  1. int main()
  2. {
  3.     FILE* miofile;
  4.     miofile=fopen("miofile","rb");
  5.    
  6.     int ch=getc(miofile);
  7.    
  8.     while( ch!=EOF )
  9.     {
  10.            int b[8];
  11.            int j;
  12.  
  13.            for(j=0;j<8;j++)
  14.            {
  15.                b[j]=ch%2;
  16.                ch=ch/2;              
  17.            }
  18.  
  19.            printf("%d%d%d%d%d%d%d%d%s",b[7],b[6],b[5],b[4],b[3],b[2],b[1],b[0],"\n");
  20.  
  21.            ch=getc(miofile);
  22.     }
  23.  
  24. }



ovviamente per un buffer della console sufficientemente grande:k:


"Mouse not found. Click mouse button to continue" (Win95).
PM Quote
Avatar
Rand (Ex-Member)
Pro


Messaggi: 163
Iscritto: 17/05/2005

Segnala al moderatore
Postato alle 18:03
Lunedì, 25/09/2006
ma che posti a fare se alla fine dici di aver trovato da solo l'errore? :rotfl: :-| :rotfl:


Ero solito portare una pallottola nel taschino, all'altezza del cuore.
Un giorno un tizio mi tirò addosso una Bibbia, ma la pallottola mi salvò la vita.

(Woody Allen)
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6108
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:31
Mercoledì, 27/09/2006
L'ha risolto 20 minuti dopo Rand... ;)


Seguimi su Twitter: http://www.twitter.com/pierotofy

Fai quello che ti piace, e fallo bene.
PM Quote