viniciusams
-
Total de itens
15 -
Registro em
-
Última visita
Posts postados por viniciusams
-
-
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
-
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...
-
Estou programando em C
Vou analisar a melhor solução para mim.
Obrigadão ae pelas dicas e ajudas!
[]'s
-
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...
-
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...
-
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á
-
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
-
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??
-
já resolvi...
-
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
-
cara, funcionou agora!
obrigado!
=]
-
cara antes de tudo obrigado pela resposta
mas alterei conforme você me falou e não tenho a resposta esperada.
code[0]= 0
name[0]= oþ·X©þ·
code[1]= 2052
name[1]= p8HP¿
code[2]= 2052
name[2]= (0¿
code[3]= 2052
name[3]= h¿
no final da função select eu mandei imprimir o vetor e este está com os valores corretos
-
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
-
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!!
struct + ponteiros
em C, C++
Postado
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