c 2d статическая инициализация массива с сохраненным размером

Аналогично объявлению массива 1D:

char arr[]={[0 ... RESERVED_CHARS-1]=' ',[RESERVED_CHARS]='\0'};

Посоветуйте, пожалуйста, как / если возможно объявить такой 2D массив?

#define SAY_MAX_MSG_LEN 6
#define REP_MAX_MSG_LEN 8

char *var_msg_out[][3]={\
    {" Say ",[][0 ... SAY_MAX_MSG_LEN+1]=' ','\0'},\
    {" Reply ",[][0 ... REP_MAX_MGS_LEN+1]=' ','\0'}\
};
snprintf(var_msg_out[0][1],SAY_MAX_MSG_LEN,"hello");
printf("%s",var_msg_out[0]);

Спасибо!

1 ответ

Решение

Единственная часть того, что у вас есть, это:

char *var_msg_out[][3]={
    {" Say ",[][0 ... SAY_MAX_MSG_LEN+1]=' ','\0'},
              ^ ???

Здесь есть фундаментальная проблема: элемент после "Скажи" char*, но вы пытаетесь присвоить ему, как если бы это был массив символов. Два не одно и то же: ваш char* может без проблем указывать на буквальную строку (например, " Say "), но вы не можете инициализировать ее символы, потому что инициализировать нечего - только указатель!

Вы можете исправить это так:

struct foo {
    const char* x;
    char y[100];
    const char* z;
};

struct foo var_msg_out[]={
    {" Say ", {[0 ... SAY_MAX_MSG_LEN+1]=' '}, ""},
    {" Reply ", {[0 ... REP_MAX_MSG_LEN+1]=' '}, ""}
};
Другие вопросы по тегам