在我继续之前,这里是代码:
#include <iostream>
using namespace std;
int main() {
char array[] = {'a','b','c'};
cout << array << endl;
return 0;
}
我的系统:
- VisualStudio 2019,默认C ++设置
- 使用Debug构建而不是发行版
运行此代码示例时,在控制台输出中得到了类似的内容:
abcXXXXXXXXX
那些X代表看似随机的字符。我知道它们来自该地址的内存中的现有值,但是我不明白为什么我要返回12个字节而不是从数组中返回3个字节。
现在,我知道如果我使用长度为四个字节的整数进行此操作,也许这是有道理的,但是sizeof(array)
返回三个(即,三个字节长,我知道了sizeof(array) / sizeof(array[0]
的把戏。)当我尝试使用int进行操作时,我会更加困惑,因为我得到了一些四字节的十六进制数字(也许是内存地址?)
很抱歉,这可能是一个琐碎的问题,但我只是想弄清楚为什么会这样。请不要使用向量,我试图在这里尽可能地保持非STL。
答案 0 :(得分:4)
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" BackgroundColor="Yellow">
//Elements here
</StackLayout>
<AbsoluteLayout StyleClass="dialogbox" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
//Popup here
</AbsoluteLayout>
接受此cout
数组,并将其作为以空值结尾的字符串进行寻址。
由于此数组中的终止字符不是空字符(即char
),因此它将尝试打印直到遇到空字符。
这时,它尝试读取已分配的数组之外的内存,从技术上讲,任何事情都可能发生。
例如,每次调用该函数时,该内存中可能会有不同的数据,或者甚至取决于调用该函数时分配char(0)
的地址,该存储访问操作甚至可能是非法的
因此,程序的行为通常被认为是未定义的(或不确定的)。