1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Problema em C

Discussão em 'Programação' iniciada por issues, 27 de Novembro de 2008. (Respostas: 4; Visualizações: 647)

  1. issues

    issues Power Member

    Tou a necessitar de ajuda, tenho um ficheiro:
    Código:
    titles.dat:
     
    A,p1,3,1;
    A,i1,2,1;
    A,m3,4,1;
    B,f4,5,2;
    B,m8,2,2;
    B,p2,6,3;
    
    e tenho um programa:

    Código:
    int main(int argc, char **argv) 
    { 
     
    char *users[3], *pass[3]; 
    char stri[10]; 
    char leru[2], lerp[3], lert[1], lern[2],pes[2],bal[2]; 
    char *num[6]; 
    char *book[6]; 
    int numb[6];
    int peso[6];
    char *balk[6]; 
    char msn[200]; 
    char snd[200]; 
    int i=0; 
     
     
    FILE *fu = fopen("./titles.dat","r+"); 
    i=0; 
    while (fgets(stri,sizeof(stri),fu)) { 
    sscanf(stri,"%[^,],%[^,],%[^,],%[^;]",bal,lert,lern,pes); 
     
    balk[i] = (char*)malloc(sizeof(bal)); 
    strcpy(balk[i],bal);
     
    book[i] = (char*)malloc(sizeof(lert)); 
    strcpy(book[i],lert); 
     
    num[i] = (char*)malloc(sizeof(lern)); 
    strcpy(num[i],lern); 
    numb[i]=atoi(num[i]); 
     
    num[i] = (char*)malloc(sizeof(pes)); 
    strcpy(num[i],pes); 
    peso[i]=atoi(num[i]);
    i++; 
    }
    fclose(fu); 
    /***********************************************************************************/ 
    /*for(i=0;i<6;++i){
    printf("%s\n",balk[i]);
    printf("%s\n",book[i]);
    printf("%d\n",numb[i]);
    printf("%d\n",peso[i]);
    }*/ 
     
     
    }
    
    Acontece que há dados que estão a ser lidos do ficheiro em duplicado, depois dá erro de segmentação

    Agradecido pela atenção.
     
    Última edição pelo moderador: 27 de Novembro de 2008
  2. m00s

    m00s Power Member

    posta aí o erro
     
  3. issues

    issues Power Member

    ./a.out
    A
    Falha de segmentação


    Se comentar o ultimo for e fizer printf ás 4 variaveis abaixo do sscanf, algumas delas, aparecem com o conteudo em duplicado
     
    Última edição: 27 de Novembro de 2008
  4. Neptune

    Neptune 1st Folding then Sex

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int argc, char **argv) { 
        char *users[3], *pass[3]; 
        char stri[10]; 
        char leru[2], lerp[3], lert[1], lern[2],pes[2],bal[2]; 
        char *num[6]; 
        char *book[6]; 
        int numb[6];
        int peso[6];
        char *balk[6]; 
        char msn[200]; 
        char snd[200]; 
        int i=0; 
        FILE *fu = fopen("./titles.dat","r+"); 
        char *str;
    
        while (fscanf(fu,"%s",stri)!=EOF) {
            str = strtok (stri,",;");
            strcpy(bal,str);
            str = strtok (NULL, ",;");
            strcpy(lert,str);
            str = strtok (NULL, ",;");
            strcpy(lern,str);
            str = strtok (NULL, ",;");
            strcpy(pes,str);
            
            balk[i] = (char*)malloc(sizeof(bal)); 
            strcpy(balk[i],bal);
    
            book[i] = (char*)malloc(sizeof(lert)); 
            strcpy(book[i],lert); 
                 
            num[i] = (char*)malloc(sizeof(lern)); 
            strcpy(num[i],lern); 
            numb[i]=atoi(num[i]); 
                 
            num[i] = (char*)malloc(sizeof(pes)); 
            strcpy(num[i],pes); 
            peso[i]=atoi(num[i]);
    
            i++; 
        }
        fclose(fu); 
        /***********************************************************************************/ 
        for(i=0;i<6;++i){
            printf("%s\n",balk[i]);
            printf("%s\n",book[i]);
            printf("%d\n",numb[i]);
            printf("%d\n",peso[i]);
        }
        return 0;
    }
     
  5. issues

    issues Power Member

    Funciona.

    Muito Obrigado pela vossa Colaboração.
     

Partilhar esta Página