int main()
{
    int i;
    typedef struct {
        int no[6];
        int socket;
    }data;

    data  *a = {
        a->no[6] = {0},
        a->socket= 3,
    };

    printf( "no[0] = %d\n",a->no[0]);
    printf("socket  = %d\n", a->socket);

    getchar();
    return 0;
}

En este código simple, he creado una estructura e inicializándola usando el puntero de estructura, asignando el valor 0 a todos los elementos de la matriz 'no' y el valor 3 a la variable socket. Recibo un error como: error C2440: 'inicializando': no ​​se puede convertir de 'lista de inicializadores' a 'datos *' nota: El inicializador contiene demasiados elementos

Donde voy mal También probé con

    data  a = {
        a.no[6] = {0},
        a.socket= 3,
    };
  printf("no0 = %d\n",a.no[0]);
    printf("socket  = %d\n", a.socket);

Aquí el código se está ejecutando pero mostrando a.socket = 0 en lugar de 3.

1
pva18 5 oct. 2019 a las 14:01

1 respuesta

La mejor respuesta

Esta declaración

data  *a = {
    a->no[6] = {0},
    a->socket= 3,
};

No tiene sentido. Si desea declarar un puntero a la estructura, puede usar un literal compuesto como

data *a = ( data[] ){ { { 0 }, 3 } };

O debería asignar dinámicamente un objeto del tipo datos.

data *a = malloc( sizeof( data ) );
a->no[0] = 0;
a->socket = 3;

Si no desea declarar un puntero, puede escribir de la siguiente manera como se muestra en el programa demostrativo

#include <stdio.h>

typedef struct {
    int no[6];
    int socket;
} data;

int main(void) 
{
    data a = { { [0] = 0 } , .socket = 3 };
    printf( "no0 = %d\n",a.no[0] );
    printf("socket  = %d\n", a.socket);

    return 0;
}

La salida del programa es

no0 = 0
socket  = 3
3
Vlad from Moscow 5 oct. 2019 a las 11:12