我正在尝试使用以下代码将地址转换为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个字符进行子串,但实际上我很想知道为什么会发生这种情况?看起来垃圾代码来自堆栈,但我想知道导致堆栈泄漏的代码有什么问题?
答案 0 :(得分:0)
我不认为有一个运算符接受一个char数组并将其发送到cout
。所以Adr
衰减到指向char的指针,当显示时,需要零值作为最后一个字符。零字符可以是0
或'\0'
。它象征着字符串的结尾。
将代码更改为:
char Adr[5];
AddressToLittleEndian((UINT32*)Adr, (UINT32)ptr);
Adr[4] = 0;
cout << Adr;
不应该显示&#34;垃圾&#34;。