Эта декларация
data *a = {
a->no[6] = {0},
a->socket= 3,
};
не имеет смысла. Если вы хотите объявить указатель на структуру, вы можете использовать либо составной литерал, например
data *a = ( data[] ){ { { 0 }, 3 } };
, либо динамически выделять объект типа данных.
data *a = malloc( sizeof( data ) );
a->no[0] = 0;
a->socket = 3;
Если выне хотите объявлять указатель, тогда вы можете написать следующий способ, как показано в демонстрационной программе
#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;
}
Выходные данные программы:
no0 = 0
socket = 3