• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

rgcaldas

[Duvida][C] Comportamento de ponteiros para estruturas

9 mensagens neste tópico

Boas

Tenho mais uma duvida para vocês.

Eu tenho uma estrutura na qual o primeiro membro é uma string. E consigo chegar a essa string só com o ponteiro para a estrutura.

Tipo:

typedef struct {
  char* string;
  int outrocampo;
}TESTE;

in main(void){
TESTE estrut;
TESTE* pointer;

pointer = &estrut;

estrut.string = malloc(10*sizeof(char));
strcpy(estrut.string,"ola mundo");

printf("%s",*pointer);

}

Este código funciona, a minha questão é se ele é correcto, ou se pode originar comportamentos desconhecidos.

Obrigado a todos

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

a "string" é o primeiro campo da struct, logo o seu endereço deverá ser o mesmo do da variável que representa toda a estrutura. tanto quanto sei, isso deve funcionar sempre, apesar disso não aconselho a usar essa solução.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A ideia é criar uma função genérica para inserir no numa lista ordenada por uma string

Se a string estiver sempre no primeiro membro eu consigo passar o ponteiro da lista e o nó a inserir, e gerir tudo mesmo sem saber qual é a estrutura.

Achas que é muito arriscado  :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes pôr a função de inserção a receber a função de comparação, e passa a funcionar não só para strings, mas para qualquer tipo de dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas de qualquer maneira a função de comparação teria de saber quais os campos a comparar.

Ou existe outra forma de comparar membros de estruturas??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

terias é que definir uma função de comparação para cada estrutura diferente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok mas eu que eu estava a tentar era em vez de ter de criar uma função de comparação para cada estrutura  diferente poder agrupar as estruturas por tipo.

E fazer por exemplo uma função para comparar estruturas pela primeira string (primeiro membro).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era bom ganhar o abito de decidires onde vaz libertar a memória.

Eu pelo menos trato malloc e free quase como chavetas, assim que abro { logo de seguida }

Não é bem a mesma coisa, mas se possivel devem andar aos pares.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Era bom ganhar o abito de decidires onde vaz libertar a memória.

Eu pelo menos trato malloc e free quase como chavetas, assim que abro { logo de seguida }

Não é bem a mesma coisa, mas se possivel devem andar aos pares.

Sim, eu também coloco sempre o free. Mas este código foi escrito aqui como exemplo e fiz copy/paste da primeira parte e já lá vinha o malloc.

Mas obrigado pela lembrança.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora