如何在没有空终止符的情况下初始化 char 数组?

How to initialize a char array without the null terminator?

char数组是网络消息的一部分,它有明确的长度,所以不需要空终止符。

struct Cmd {
    char cmd[4];
    int arg;
}

struct Cmd cmd { "ABCD" , 0 }; // this would be buffer overflow

如何初始化这个 cmd 成员字符数组?不使用像 strncpy?

这样的函数

如果 char 数组的大小与初始值设定项中的字符数相同,则忽略终止空字符。所以 cmd 不会有空终止符。

C11 标准 (n1570) 中的相关部分是 6.7.9/14

An array of character type may be initialized by a character string literal or UTF−8 string literal, optionally enclosed in braces. Successive bytes of the string literal (including the terminating null character if there is room or if the array is of unknown size) initialize the elements of the array.

和语句:

struct Cmd cmd { "ABCD" , 0 };

应该是:

struct Cmd cmd  = { "ABCD" , 0 };