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

时间:2019-05-13 04:16:01

标签: c arrays string c11 null-terminated

char数组是网络消息的一部分,具有明确定义的长度,因此不需要空终止符。

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

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

如何初始化此cmd成员char数组?不使用strncpy之类的功能?

1 个答案:

答案 0 :(得分:8)

如果char数组的大小与初始化程序中的字符数相同,则忽略终止字符。因此cmd将没有空终止符。

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

  

字符类型的数组可以由字符串文字或UTF-8字符串文字初始化,并可选地用大括号括起来。字符串文字的连续字节(包括终止空字符,如果有空间 ,或者如果数组大小未知)则初始化数组的元素。

语句:

struct Cmd cmd { "ABCD" , 0 };

应为:

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