c - 如何在没有空终止符的情况下初始化 char 数组?
问题描述
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:
字符类型的数组可以由字符串文字或 UTF-8 字符串文字初始化,可选地用大括号括起来。字符串文字的连续字节(如果有空间或数组大小未知,则包括终止的空字符)初始化数组的元素。
和声明:
struct Cmd cmd { "ABCD" , 0 };
应该:
struct Cmd cmd = { "ABCD" , 0 };
推荐阅读
- opencv - 三角剖分 3D 点导致扭曲(抛物面)图的原因可能是什么?尝试使用 SFM 执行 3D 重建
- python - 如何解决此问题“ModuleNotFoundError: No module named 'torch.tensor'”
- python - 基于列标识符的聚合计数
- c++ - Cmake - 为不同的源选择不同的c++标准
- algorithm - 递归关系树方法紧界
- python - 我正在创建一个(非常粗糙的)计算器,并想知道这段代码有什么问题
- linux - 虚拟机中的 npm 命令
- flutter - 用空值或空值初始化有什么区别吗?
- julia - 在约束 JuMP 中编码数组
- c++ - 为什么 C++ 允许在 case 标签下定义对象,即使这些 case 与检查值不匹配,这与 if 语句相反?