字符数组初始化和尾随空值
Character array initialization and trailing null
当我声明大小为 2 的 char 数组并为其分配数据时,何时有尾随的"\0"(空字符)?
我知道那件事:
char data[2] = {'a', 'b'}; // array holds 'a', 'b'
我也知道
char data[] = "ab"; // array holds 'a', 'b', ' '
但是,我想知道这是做什么的?
char data[2] = "ab"; // Is there a trailing ' '?
我一直认为这是一个错误,但是查看cpp首选项它说:
如果数组的大小已知,则它可能比字符串文本的大小小 1,在这种情况下,将忽略终止 null 字符:
char str[3] = "abc"; // str has type char[3] and holds 'a', 'b', 'c'
那么"可能"是什么意思呢?它是否依赖于实现?
不,在C++中,您必须始终为 NUL 终止符腾出空间:
char str[3] = "abc";
需要发出诊断程序。
在 C 中,你可以用"它被允许"代替 may,确实如此
char str[3] = "abc";
是允许的,但不复制 NUL 终止符。
这是 C 和 C++ 之间的众多重要区别之一。
导致数组溢出的声明甚至无法在MSVC,GCC或Clang上编译:
a value of type "const char [3]" cannot be used to initialize an entity of type "char [2]"
error: initializer-string for char array is too long
等。
相关文章:
- 复制几乎为空的数组的最快方法
- 尝试将对象插入空指针数组时出现分段错误
- 缩放和插值数组
- 从类型元组到通过调用模板函数返回的值数组
- 采用OpenCV Mat<doube>并转换为12位值数组。
- 如何将值数组从 json 文件读取到 c++ 数组
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 有没有办法在值数组中随机添加或减去两个特定数字或更多
- 生成随机值数组而不重复
- 在 OpenCV 中加载像素值数组
- 使用空指针数组时C++错误
- 使用布尔值数组"表达式必须具有指向对象类型的指针"错误C++
- 如何使用C Win32 API设置和获取多个值(数组值)到Active Directory中的单个属性
- C++返回一个空指针数组
- 如何在C++中将值数组转换为参数
- 有没有任何方法可以确定rgb值数组的宽度和高度
- c++如何创建一个现有char数组大小的空char数组
- 获取内存值数组的最快方法
- 传递指针数组并返回这些指针指向的值数组
- C++填充静态值数组