C/Visual C - Punteros y malloc()

   
Vista:

Punteros y malloc()

Publicado por Clayder (16 intervenciones) el 29/09/2008 21:38:17
Hola:

Tengo un problemilla con algunas definiciones sobre punteros, por ejemplo:

struct mi_struct{
char nombre[5];
};

typedef mi_struct St;

int main()
{
St *st;
st = (mi_struct*)(malloc(sizeof(struct mi_struct)));
st->nombre = "Hola";
}

Porque no me permite asignarle un valor con el "=" y si con "strcpy(st->nombre,"Hola");". Ademas cuando se debe usar malloc()?, solo cuando creo variables de tipo puntero? y porque me pide hacerle un casting al tipo de dato de "mi_struct"? ya que he visto porciones de codigo en la que no te pide hacer este casting y lo asigna solo, por ejemplo en las estructuras de datos como una lista enlazada.

Gracias de antemano por resolver mis dudas.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Punteros y malloc()

Publicado por chema (8 intervenciones) el 02/10/2008 18:32:38
El problema radica en que cuando declaraste en el strcut, char nombre[5]; , le estás poniendo un límite a tu cadena, y cuando quieres asignar directamente st->nombre=""hola", pues tu puedes suponer que "hola" si cabe en la nombre, pero el compilador no lo sabe, (osea no te cuenta los caracteres de "hola"). Que pasaría si quisieras asignar st->nombre="Hooooooooola", pues habría un error no crees?.

La solución en este caso es usar strcpy(st->nombre,"Hola"), o en todo caso, declarar
char *nombre;

dentro del struct, de está manera te dá la posibilidad de más espacio.

Comentario extra: Si estás utilizando C++, te recomiendo que uses el comando "new"
es mucho más práctico.

St *st;
st=new St;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar