Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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:

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:

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

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


Il mio blog: https://piero.dev
PM Quote