Estoy tratando de inicializar una estructura usando llaves, pero realmente estoy tratando de inicializar la estructura a la que apunta un puntero devuelto por una llamada malloc.
typedef struct foo{ int x; int y; } foo; foo bar = {5,6};Entiendo cómo hacerlo, pero necesito hacerlo en este contexto.
foo * bar = malloc(sizeof(foo)); *bar = {3,4};(Esto fue respondido en los comentarios, por lo que es un CW).
Debe emitir el lado derecho de la tarea, así:
*bar = (foo) {3,4};Como señaló @cremno en el comentario, esto no es un reparto sino una asignación de un literal compuesto
La sección relevante del estándar C99 es: 6.5.2.5 Literales compuestos que dice:
Una expresión de sufijo que consta de un nombre de tipo entre paréntesis seguido de una lista de inicializadores entre llaves es un literal compuesto. Proporciona un objeto sin nombre cuyo valor viene dado por la lista de inicializadores
bar es un puntero que hace referencia a la estructura foo malloced
Usar bar->x=3;bar->y=4