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]=' '}, ""}
};