Estruturas em C - Ajuda

Craptain.Whisky

Power Member
Boas tenho estado a tarde inteira a perceber o porquê de isto estoirar, quando faço a atribuição da estrutura principal para uma temporaria ele estoira, já fiz testes e é nesta linha sublinhada que estoira:


#include <stdio.h>
#include <stdlib.h>
#include "stdlib.h"
#define MAX 1000
int opcao;
struct Candidatos
{
int nrcandidato;
char nome [50];
char contacto [50];
char habilitacoes_academicas [100];
char conhecimentos_informaticos [500];
char conhecimentos_linguas [500];
char nome_empresa [100];
char cargo_funcao [80];
float salario;
int ano_nascimento;
int telefone;
char morada[100];
} tabelaContactos[MAX];

struct Candidatos* orgCargo(struct Candidatos tabela[], int nrcontactos, char* nome,int *nrpreenchido)
{
int aux;
int i;
int b = 0;
struct Candidatos* tabelacargos;
struct Candidatos temp;
for(i = 0; i < nrcontactos; i++)
{
if (strcmp(tabela.cargo_funcao,nome) == 0)
{
tabelacargos = tabela;
b = b + 1;
}
}
for(i = 1; i < b;i++)
{
aux = i - 1;
while(aux >= 0 && strcmp(tabelacargos[aux+1].cargo_funcao, tabelacargos[aux].cargo_funcao) < 0 )
{
temp = tabelacargos[aux + 1];
tabelacargos[aux+1] = tabelacargos[aux];
tabelacargos[aux] = temp;
aux--;
}
}
nrpreenchido = b;
printf("%d",nrpreenchido);
system("pause");
return tabelacargos;
}

O que eu quero é passar uma tabela temporaria para o main só para mostrar uma listagem com os varios candidatos com x cargo. Quando faço a atribuição da posição do array da tabela principal (com todos os registos) para a tabela auxiliar(tabelacargos) é ai que estoira. Mas só quando o programa está a correr no compilador diz me que estou a usar o mesmo tipo de estrutura e tudo, daí que esteja um pouco confuso com isto :/ .
 
Agora não estou com muito tempo para analisar o codigo, mais tarde vejo melhor mas em vez de passares para o main uma cópia da tabela passa antes um apontador para a mesma para evitar a repetição de dados e para optimizar o teu programa.
 
Código:
struct Candidatos* orgCargo(struct Candidatos tabela[], int nrcontactos, char* nome,int *nrpreenchido)
{
[i](...)[/i]
struct Candidatos* tabelacargos;
[i](...)[/i]
tabelacargos[b] = tabela[i];
[i](...)[/i]
}
tabelacargos não é uma tabela, é um ponteiro para uma estrutura Candidatos.

Altera:
Código:
struct Candidatos* tabelacargos;
Para:
Código:
struct Candidatos tabelacargos[[i]tamanho_tabela[/i]]
o tamanho_tabela ou calculas apartir da tabela, ou passas pela função.
 
Código:
struct Candidatos* orgCargo(struct Candidatos tabela[], int nrcontactos, char* nome,int *nrpreenchido)
{
[I](...)[/I]
struct Candidatos* tabelacargos;
[I](...)[/I]
tabelacargos[b] = tabela[i];
[I](...)[/I]
}
tabelacargos não é uma tabela, é um ponteiro para uma estrutura Candidatos.

Altera:
Código:
struct Candidatos* tabelacargos;
Para:
Código:
struct Candidatos tabelacargos[[I]tamanho_tabela[/I]]
o tamanho_tabela ou calculas apartir da tabela, ou passas pela função.


Consegui resolver o problema a uns dias, era esse o problema xBoShy tive que usar o mesmo tamanho da tabela que tenho na estrutura mas ao menos consegui criar uma tabela do mesmo tipo.
Obrigado pela ajuda ;)
 
Back
Topo