显示字符数组时显示“垃圾”

时间:2018-02-08 10:53:06

标签: c++ memory-leaks stack

我正在尝试使用以下代码将地址转换为Little-Endians中的等效地址:

void AddressToLittleEndian(UINT32* adr, UINT32 value) { *adr = value; }


int main()
{
    char *ptr = (char*) 0x41424344;
    char Adr[4];
    AddressToLittleEndian((UINT32*)Adr, (UINT32)ptr);
    cout << Adr;
    _getch();
    return 0;
}

它没有错误,但给了我以下结果:

  

DCBA╠╠╠╠╠╠╠╠DCBA╠╠╠╠&LT;,ö∩╨≈Å

期望的结果是DCBA并且我可以以某种方式对前4个字符进行子串,但实际上我很想知道为什么会发生这种情况?看起来垃圾代码来自堆栈,但我想知道导致堆栈泄漏的代码有什么问题?

1 个答案:

答案 0 :(得分:0)

我不认为有一个运算符接受一个char数组并将其发送到cout。所以Adr衰减到指向char的指针,当显示时,需要零值作为最后一个字符。零字符可以是0'\0'。它象征着字符串的结尾。

将代码更改为:

char Adr[5];
AddressToLittleEndian((UINT32*)Adr, (UINT32)ptr);
Adr[4] = 0;
cout << Adr;

不应该显示&#34;垃圾&#34;。