首页 > 解决方案 > 如何在没有空终止符的情况下初始化 char 数组?

问题描述

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

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

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

如何初始化这个 cmd 成员字符数组?不使用类似的功能strncpy

标签: carraysstringc11null-terminated

解决方案


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

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

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

和声明:

struct Cmd cmd { "ABCD" , 0 };

应该:

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

推荐阅读