Ir para conteúdo
Fórum Script Brasil

viniciusams

Membros
  • Total de itens

    15
  • Registro em

  • Última visita

Posts postados por viniciusams

  1. Amigo, não é exatamente isso não, obrigado pela tentativa

    o meu problema é que o membro é uma uniao de varias outras estruturas, então, pode ser teste->membro.teste1 ou teste->membro.teste2 ou teste->membro.teste3

    Essas estruturas teste1, teste2 e teste3 eu só sei em tempo de execução, então para eu fazer isso só fazendo um switch, pois eu recebo um id, ou então eu utilizo a ideia da minha pergunta, que é utilizar um ponteiro para preencher a estrutura

  2. Pessoal, estou querendo percorrer uma struct e setar valores nela utilizando um ponteiro, é possível? Como?

    Eu preciso dessa forma porque um campo da struct é uma union e assim podem ser diferentes tipos de estrutura no mesmo campo, então como não sei qual eu vou receber e para evitar um switch imenso estou pensando em fazer dessa forma.

    Assim vou utilizar offsetof para ajudar tambem.

    alguém sabe como fazer isso?

    Valeu

  3. E ai pessoal,

    estou usando o metodo SHA1(..) que se encontra nas lib do OpenSSL.

    O método está declarado da seguinte forma nos documentos:

    unsigned char *SHA1(const unsigned char *d, unsigned long n,

    unsigned char *md);

    "SHA1() computes the SHA-1 message digest of the n bytes at d and places it in md (which must have space for SHA_DIGEST_LENGTH == 20 bytes of

    output). If md is NULL, the digest is placed in a static array."

    Até ai tudo bem, o problema que não estou conseguindo operar com as diferenças de unsigned e signed char.

    Detalhe que quero atribuir o valor criptografado em um campo signed char.

    Estou fazendo da seguinte forma:

    unsigned char sha1sum[SHA_DIGEST_LENGTH];
    test_t teste; //esta estrutura possui um signed char
    SHA1((unsigned char *)teste->name, strlen(teste->name), sha1sum);
    signed char textoCifrado[SHA_DIGEST_LENGTH];
        for (i = 0; i < SHA_DIGEST_LENGTH; i++) {
            char val[20];
            sprintf(val, "%02x ", sha1sum[i] );
            strcat(textoCifrado, val);
        }
    printf("%s", textoCifrado);

    Saída: a!comdd 01 90 39 21 ea 24 94 20 32 30 20

    e depois dá erro e exibe memoy map e outras coisas mais.

    Alguém sabe o que pode ser o meu erro??

    Obrigado desde já

    Pessoal, já resolvi

    a implementação está correta.

    A questão que falto eu iniciar meu

    signed char textoCifrado[sHA_DIGEST_LENGTH] = "";

    Ai quando fiz isso deu certo...

    de qualquer forma fica o post se alguém tiver dúvidas como utilizar o SHA1...

    Pessoal, já resolvi

    a implementação está correta.

    A questão que falto eu iniciar meu

    signed char textoCifrado[sHA_DIGEST_LENGTH] = "";

    Ai quando fiz isso deu certo...

    de qualquer forma fica o post se alguém tiver dúvidas como utilizar o SHA1...

  4. Entendi sim maligno!

    agora, você teria uma sugestão de desalocar memoria no proprio metodo?

    porque é uma API e não queria passar esse trabalho para o meu cliente, então queria desalocar os PTR no proprio metodo.

    Mas todas as tentativas minhas foram em vão.

    Dessa forma, o cliente desalocaria apenas a lista...

  5. Entendi, então um simples free(testeList) não libera tudo.

    Deve liberar primeiro os PTR da coluna e depois o testeList? Como faz isso?

    Cara é sim uma matriz pra ponteiro, eu sou iniciante em C e foi uma solução que eu encontrei para eu passar para o cliente do meu método uma matriz preenchida com valores...

  6. E ae pessoal,

    espero que me ajudem nessa dúvida.

    Tenho o seguinte método sintetizado:

    S16 teste(teste_t **testeList){
        S8 *PTR;
        teste_t *lista;
        ...
            //aloca memoria para a lista
            lista = (teste_t *) calloc (lines * columns, sizeof (teste_t ));
    
            // verify all lines 
            for (i = 0; i < lines; i++) {
                // verify all columns in this line
                for (j = 0; j < columns; j++) {
    
            ...
    
                        PTR = (S8 *) malloc (sizeof(S8[20]));
                        getValue(j, PTR);
                        lista[i].number.present = TRUE;
                        lista[i].number.value = PTR;
                    }
                }
            }
        
       *testeList = lista;
       
        return SUCCESS;
    }

    A minha dúvida é:

    Quando o cliente do meu método liberar memoria do testeList ( free(testeList) ), irá automaticamente liberar também de lista? e dos PTR gravados em cada campo de lista?

    Se alguém não entendeu me fala que eu explico de novo.

    Valeu desde já

  7. Galera, meu problema é o seguinte

    tenho a seguinte estrutura:

    typedef struct {
      int id;
      char *name
    } teste_t;
    Tenho uma função que recebe um ponteiro para o vetor dessa estrutura. Tenho que preencher o vetor. A função origem deve receber os valores corretos.
    int select(teste_t **testeList){
      char *valPTR;
      //aloca memoria para as linhas
      *testeList= (teste_t *) calloc(lines, sizeof (teste_t *));
      //aloca memoria para as colunas
      for (i = 0; i < columns; i++) {
          testeList[i] = (teste_t *) calloc (columns, sizeof (teste_t));
      }
      ...
      for (...) {
         getValue(ptr, j, &c);
         testeList[i]->id = c;
         valPTR = (char *) malloc (sizeof(char[30]));
         getValueString(ptr, j, valPTR);
         testeList[i]->name = valPTR;
      }

    Bom, o que acontece é que no final dessa função eu sou printf e vejo que os dados do vetor estão coincidindo com o esperado, mas quando eu retorno na função main, que eu chamo o select, o vetor apresenta apenas a primeira posição com o valor correto, a segunda posição por exemplo não tem nada.

    Qualquer dúvida me falem.

    Desde já agradeço

  8. Aloquei memória considerando ser matriz

    //aloca memoria para as linhas
            *testeList = (teste_t *) calloc(lines, sizeof (teste_t *));
            //aloca memoria para as colunas
            for (i = 0; i < lines; i++) {
                testeList [i] = (teste_t *) calloc (columns, sizeof (teste_t));
            }

    Jonathan, é isso mesmo??

  9. Galera gostaria de saber o motivo do erro e como conserta-lo.

    Tenho um vetor de uma estrutura e aloco memória dinamicamente para ela.

    Quando vou setar um valor na posição 0 é ok. quando vou setar na posição 1 dá erro.

    exemplo de código:

    void select(teste_t **testeList){
            ...
            *testeList= (teste_t *) malloc(n * sizeof (teste_t)); // n = número de linhas
            printf("VOU PREENCHER\n");
            testeList[0]->id.value = 1;
            printf("DEU CERTO\n");
            testeList[1]->id.value = 2; // Dá errado!!

    Execução:

    DEU CERTO

    Falha de segmentação

    Desde já agradeço

  10. Galera, sou completamente iniciante em c

    implementei um código e este não funciona. Declaro um ponteiro que será um vetor, não seto o tamanho. Passo ele como parametro para outra função.

    Nesta outra função eu aloco espaço e seto os valores neste vetor. O método origem exibe os valores do vetor.

    Poderiam me ajudar a apontar o erro?

    int main(int argc, char** argv) {
        U16 id, i;
        conexaoinfo_t info;
        teste_t teste, *testeFinalList;
        ...
        
       select(idconn, &teste, testeFinalList)
       for (i = 0; i < sizeof (testeFinalList); i++) {
             printf("code[%d]= %d\n", i, testeFinalList[i].cod);
             printf("name[%d]= %s\n", i, testeFinalList[i].nome);
       }
    }
    
    select(U16 id, teste_t *teste, teste_t *testeFinalList){
        testeFinalList= (teste_t *) malloc(lines * sizeof (teste_t));
        for (i =0 ...){
             testeFinalList[i].code = c;
             strcpy(testeFinalList[i].name, name);
         }
    }

    Bom, cortei o código justamente para ficar mais fácil de entender o problema. Não consigo passar o parâmetro carrierFinalList e obter o resultado esperado.

    Desde já agradeço

  11. Pessoal,

    estou planejando realizar o seguinte trabalho:

    desenvolver um aplicativo para celular em JME

    desenvolver um web service que rodará em meu pc

    conectar ambos via bluetooth e realizar trocas de msgs e objetos.

    Estou lendo muitas coisas interessantes, aprendendo, porém está faltando aquele Hello World básico que ajuda a entender.

    Alguém ai conhece o assunto e tem links interessantes, dicas, ou cod fonte mesmo?

    Valeu!!

×
×
  • Criar Novo...