(17-05-2009 02:11)Ana Escreveu: Tu estás por acaso a alocar os espaço para a estrutura? Sabes que quando trabalhas com estruturas não basta declarar variáveis do tipo da estrutura e escrever lá.
Para já, precisas de funções auxiliares que te aloquem e "desaloquem" espaço para cada estrutura, e para cada campo, no caso das strings.
Supomos que o tamanho máximo de cada string é 1000, por exemplo.
Alterei um pouco o teu código, não percebo porque colocas *Estrutura, não há necessidade, quando declarares a estrutura, aí sim, declaras como ponteiro.
Aqui está o teu código original modificado (eu sou um bocado picuinhas com as normas), e acrescentei-te algumas funções.
Código:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 1000
typedef struct hipotese
{
char *hip;
char *prox_hip;
} hipotese_t;
typedef struct condicao
{
char *cond;
char *prox_cond;
int *valor_log;
} condicao_t;
typedef struct regra
{
hipotese_t estrutura1;
condicao_t estrutura2;
char *nv_valor;
struct regra *proxima;
} regra_t;
/* Aloca espaço para uma nova hipotese, e para os seus campos */
hipotese_t *nova_hipotese(char *hip, char *prox_hip) {
hipotese_t *nova = (hipotese_t *)malloc(sizeof(hipotese_t));
nova->hip = (char *)malloc(MAX * sizeof(char));
strncpy(nova->hip, hip, MAX);
nova->prox_hip = (char *)malloc(MAX * sizeof(char));
strncpy(nova->prox_hip, prox_hip, MAX);
return nova;
}
/* Liberta os campos de uma hipotese e por fim a própria hipótese */
void liberta_hipotese(hipotese_t *hipotese) {
free(hipotese->hip);
free(hipotese->prox_hip);
free(hipotese);
}
int main(void) {
char *hip = "A";
char *prox_hip = "B";
/* Estou a criar uma nova hipotese usando os argumentos definido acima */
hipotese_t *hipotese = nova_hipotese(hip, prox_hip);
printf("hip: %s\nprox_hip: %s\n", hipotese->hip, hipotese->prox_hip);
/* No fim, libertar SEMPRE toda a memória alocada */
liberta_hipotese(hipotese);
return 0;
}
Ou aqui, para veres com cores: http://pastebin.com/f75efa66
Atenção:
Eu apenas criei a função de criação e destruição da tua estrutura hipotese.
Tens de fazer o mesmo para a estrutura condicao.
Depois para a estrutura regra, inicializas o campo hipotese e condicao com as funções de criação de hipoteses e condições acima descritas.
Se não perceberes alguma função, faz no terminal (em Linux ou Mac): man nome_da_funcao
Boa sorte!
(Isso deu um bocadinho de trabalho, agora vou dormir )
thanks, se fores d Braga, pago t qqr coisa... nem fazes ideia das dores d cabeça q isto me tá a dar....