elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recopilación Tutoriales y Manuales Hacking, Seguridad, Privacidad, Hardware, etc


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con estructuras C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con estructuras C  (Leído 2,691 veces)
David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Duda con estructuras C
« en: 30 Abril 2014, 13:24 pm »

Si por ejemplo tengo la siguiente estructura de datos:

Código:
struct nombre{
   // código
};

struct nombre array[N];   // siendo N un entero cualquiera

Esto lo entiendo; creo un array que contiene N estructuras.

Ahora lo que quiero es hacer lo equivalente a lo anterior pero con un puntero.
Yo he intentado esto, pero seguro que es erróneo:

Código:
struct nombre{
   // código
};

struct nombre *puntero;
puntero = (struct nombre*)malloc(N * sizeof(nombre));

Espero que me puedan ayudar. Un saludo.


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Duda con estructuras C
« Respuesta #1 en: 30 Abril 2014, 13:35 pm »

"nombre" como tal no es nada... el identificador real es "struct nombre"

Código
  1. puntero = (struct nombre*)malloc(N * sizeof(struct nombre));


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda con estructuras C
« Respuesta #2 en: 30 Abril 2014, 16:45 pm »

Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
Código
  1. puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Duda con estructuras C
« Respuesta #3 en: 30 Abril 2014, 17:21 pm »

Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
Código
  1. puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).

Un saludo

Gracias por el detalle.

Pero en este fragmento de programa:

Código:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

typedef char* String;

struct jugador{
String nombreJugador;
int nFichas;   // número de fichas que tiene el jugador
int posicion;   // NO ES REALMENTE UNA POSICIÓN SINO EL ORDEN EN QUE VA A JUGAR
String cara;
String palo;
};


struct jugador *Jugador;

Jugador = malloc(5 * sizeof *Jugador);   // definimos 5 jugadores

int main(void){

// codigo

}

Me da error en
Código:
struct jugador *Jugador;

Jugador = malloc(5 * sizeof *Jugador);   // definimos 5 jugadores

Y no sé cual puede ser el fallo.

Un saludo



Solo agregar que en C la conversión explicita no es necesaria y si utilizas "sizeof *puntero" en la llamada a malloc:
Código
  1. puntero = malloc(N * sizeof *puntero);
Evitas indicar el tipo apuntado (lo que reduce errores lógicos).

Un saludo

Perdona, ya vi que no funcionaba porque estaba definido como global.
Pero no sé porque.

Un saludo
« Última modificación: 5 Mayo 2014, 14:17 pm por Eternal Idol » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda con estructuras C
« Respuesta #4 en: 30 Abril 2014, 17:52 pm »

Porque cuando declaras una variable fuera de toda función (en tu caso "Jugador") y quieres darle un valor inicial este debe ser uno constante como 123 o "alguna cadena" (no puedes utilizar llamadas a función).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Duda con estructuras C
« Respuesta #5 en: 2 Mayo 2014, 18:25 pm »

Porque cuando declaras una variable fuera de toda función (en tu caso "Jugador") y quieres darle un valor inicial este debe ser uno constante como 123 o "alguna cadena" (no puedes utilizar llamadas a función).

Un saludo

Esta duda la tengo porque estoy haciendo un programa que simule el juego del poker.
Y relacionado con esto tengo lo siguiente:

Código:
typedef char* String;

struct jugador{
String nombreJugador;
int nFichas;  
int posicion;  
String *cara;
String *palo;
};

// código

int main(void)
{
// código
Jugador = malloc(5 * sizeof(*Jugador));
//código
reservaMemoriaManos();
//código

return EXIT_SUCCESS;
}

void reservaMemoriaManos()
{
int i, j;

for(i = 0; i<5; i++){
(Jugador + i) -> cara = (char **)malloc(2 * sizeof(char *));
(Jugador + i) -> palo = (char **)malloc(2 * sizeof(char *));

for(j = 0; j<2; j++){
(Jugador + i) -> cara[j] = (char *)malloc(7 * sizeof(char));
(Jugador + i) -> palo[j] = (char *)malloc(10 * sizeof(char));
}
}

return;
}

Y en esta última función me parece que falla el programa. Pero no sé que es.
Lo que intento hacer es que cada uno de los 5 jugadores declarados con

Código:
Jugador = malloc(5 * sizeof(*Jugador));
tengan 2 cartas, por los que deberán tener 2 palos y 2 figuras.

Lo escribo aquí para no abrir un nuevo tema, ya que está relacionado con lo anterior.

Un saludo
« Última modificación: 2 Mayo 2014, 18:29 pm por David8 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda con estructuras C
« Respuesta #6 en: 2 Mayo 2014, 23:12 pm »

Falta entre otras cosas las directivas de inclusión y la declaración de la variable "Jugador", por favor publica el código fuente completo.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
David8

Desconectado Desconectado

Mensajes: 50


Ver Perfil
Re: Duda con estructuras C
« Respuesta #7 en: 5 Mayo 2014, 12:42 pm »

Falta entre otras cosas las directivas de inclusión y la declaración de la variable "Jugador", por favor publica el código fuente completo.

Un saludo

Ya lo solucioné. Es que tenía un for que en un caso particular del índice cambiaba su valor a 0 y esto hacía un bucle infinito.

Muchas gracias por la ayuda, un saludo.

En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[C] - Duda estructuras « 1 2 »
Programación C/C++
h0oke 14 7,215 Último mensaje 21 Mayo 2010, 22:34 pm
por Littlehorse
Duda con estructuras (struct)
Programación C/C++
alexis33de 1 2,745 Último mensaje 28 Agosto 2010, 03:41 am
por Littlehorse
[Duda] Estructuras « 1 2 »
ASM
xv0 15 9,252 Último mensaje 12 Febrero 2013, 10:18 am
por fary
Duda con estructuras
Dudas Generales
fins94 1 2,150 Último mensaje 4 Junio 2013, 18:55 pm
por ivancea96
Duda lista con estructuras c++
Programación C/C++
d00ze13 3 2,223 Último mensaje 19 Diciembre 2013, 15:34 pm
por rir3760
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines