Ren*_*res 2 c++ c++11 c++14 c++17
我试图声明两个字符数组,一个接一个。当我这样做时,数组似乎相互重叠。
#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;
}
Run Code Online (Sandbox Code Playgroud)
此代码的输出然后变为:
cmnd array: ls
flags array: als
Run Code Online (Sandbox Code Playgroud)
根据输出,我的 flags 数组应该只包含{'a'}实际上包含{'a','l','s'}.
为什么会出现这种情况?预先感谢您对此问题的任何见解。
在 C++ 中,所有纯char字符串实际上都称为空终止字节字符串。
这个空终止符告诉所有处理此类字符串的函数,该字符串在何处结束。如果字符串缺少空终止符,它们将越界,并且您将有未定义的行为。
如果要将字符数组用作字符串,则需要确保它们包含空终止符。在您的情况下,它非常简单:不要为数组指定大小并在初始化时使用文字字符串:
char cmnd[] = "ls";
char flags[] = "a";
Run Code Online (Sandbox Code Playgroud)
现在cmnd将阵列3个字符,并且初始化为包含'l','s'和空终止'\0'。同样flags将是一个由两个字符组成的数组,初始化为'a'和'\0'。
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |