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

Dpontes11

memória dinâmica com estruturas

5 mensagens neste tópico

Olá a todos

Estou a tentar fazer um pequeno programa para a faculdade usando estruturas em memória dinâmica, mas não percebo muito disto... O que pretendo fazer, para começar, é introduzir um certo número de "utilizadores" com nome e número. Queria que depois o programa mostrasse uma lista dos dados dos utilizadores.

O código que já desenvolvi até ao momento usando o que apanhei da net é o seguinte:

#include <stdio.h>
#include <stdlib.h>

typedef struct{
int num;
char nome[10];
}id;

main()
{
int i,num;
char nome[20];
struct id *iden;
  
*iden=(struct id *)malloc(sizeof(struct id));

for(i=0;i<4;i++)
	{
 printf("Nome: ");
 gets(nome);
 strcpy(iden->nome[i],nome);
 printf("Numero: ");
 scanf("%d",&num);
 iden->num[i] = num;
}
for(i=0;i<4;i++)
	{
 printf("Nome: %s",iden->nome[i]);
 printf("Numero: %d",iden->num[i]);
}
}

Alguém me pode ajudar a dizer o que preciso de fazer para por isto a funcionar correctamente, ou pelo menos alguma dica ou dizer como funciona os malloc...

Qualquer ajuda é bem-vinda  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Experimenta assim:

#include <stdio.h>
#include <stdlib.h>

typedef struct sID{
int num;
char nome[10];
} nID, *ID;

main() {
int i,num;
char nome[20];

ID iden;
  
iden = (ID) malloc(sizeof(nID));

for(i=0;i<4;i++) {
	printf("Nome: ");
	gets(nome);
	strcpy(iden->nome[i],nome);
	printf("Numero: ");
	scanf("%d",&num);
	iden->num[i] = num;
}
for(i=0;i<4;i++) {
	printf("Nome: %s",iden->nome[i]);
	printf("Numero: %d",iden->num[i]);
}
}

http://en.wikipedia.org/wiki/Malloc

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

convém ter cuidado com os buffer overflows.

usar o 'gets' é meio caminho andado para ter um e usar um 'strcpy' de uma string de tamanho 20 para uma de tamanho 10 também não é muito boa ideia, ou melhor, copiar uma string para um caracter não é muito boa ideia.

se só existe um ID por que razão estão a ler 4 valores? por que razão estão a usar esses '[ i ]'? se calhar deviam ter um array de ID's (e mesmo nesse caso isso não ficaria dessa forma).

PS: um 'return 0;' no fim fica sempre bem...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dpontes11  tens de alterar alinha:

 *iden=(struct id *)malloc(sizeof(struct id)); 

para:

*iden=(struct id *)malloc(sizeof(struct id) * 4);

para passares a ter um vector de 4 elementos do tipo struct id.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado a todos pela ajuda.... :)

Assim que puder testar, aviso acerca do resultado!!

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