Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Ajuda em C -> Manipulação de Ficheiros com strings
17-05-2009, 02:53
Mensagem: #11
RE: Ajuda em C -> Manipulação de Ficheiros com strings
(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 Tongue )

thanks, se fores d Braga, pago t qqr coisa... nem fazes ideia das dores d cabeça q isto me tá a dar....
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 1 Visitante(s)