Char数组返回的数据比预期多四倍

时间:2019-05-31 01:48:28

标签: c++ arrays

在我继续之前,这里是代码:

#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。

1 个答案:

答案 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)的地址,该存储访问操作甚至可能是非法的

因此,程序的行为通常被认为是未定义的(或不确定的)。