0

类似于一维数组声明:

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

请建议如何/如果可能的话声明这样的二维数组?

#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]);

谢谢 !

4

1 回答 1

2

你所拥有的唯一部分是:

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

这里有一个基本问题:“ Say”之后的元素是 a char*,但您试图将其分配给它,就好像它是一个 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]=' '}, ""}
};
于 2014-09-06T12:47:38.643 回答