c++ - 声明顺序重叠的字符数组
问题描述
我试图声明两个字符数组,一个接一个。当我这样做时,数组似乎相互重叠。
#include <iostream>
int main(){
char cmnd[2] = {'l', 's'};
char flags[1] = {'a'};
std::cout << "cmnd array: " << cmnd << std::endl;
std::cout << "flags array: " << flags << std::endl;
}
这段代码的输出就变成了:
cmnd array: ls
flags array: als
根据输出我的标志数组应该只包含{'a'}
实际包含{'a','l','s'}
。
为什么会出现这种情况?提前感谢您对此问题的任何见解。
解决方案
在 C++ 中,所有纯char
字符串实际上都称为空终止字节字符串。
这个空终止符告诉所有处理此类字符串的函数,字符串在哪里结束。如果字符串缺少空终止符,它们将超出范围,并且您将有未定义的行为。
如果您想将一个字符数组用作字符串,您需要确保它们包含一个空终止符。在您的情况下,这非常简单:不要指定数组的大小并在初始化时使用文字字符串:
char cmnd[] = "ls";
char flags[] = "a";
现在cmnd
将是一个包含三个'l'
字符的数组,并初始化为 contains's'
和 null-terminator '\0'
。同样flags
将是一个由两个字符组成的数组,初始化为'a'
和'\0'
。
推荐阅读
- angular - 间谍行为主题并应用 .pipe
- flutter - 如何从 dart 流中的回调函数中产生一个值
- jquery - 使用jquery datetimepicker输入事件关闭时如何在表格行中找到最近的表单元素
- c# - 获取静态文件中间件的 asp net core 中的区域列表
- swift - 线程 9: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) firebase
- kubernetes - 为部署公开端口范围
- python - NoneType' 对象没有属性 'append'
- python - 如何模拟类方法中使用的外部函数?
- laravel - 在 Rest API 中将参数作为原始 JSON 发送时 whereJsonContains() laravel 5.8 中的问题
- sql - 如何以数组格式将数据从一个表插入到另一个表?