Note:
/* * Trivial code */ wchar_t *greeting = L'Hello World!'; char *greeting_ = 'Hello World!';
WinDbg:
0:000> ?? greeting wchar_t * 0x00415810 'Hello World!' 0:000> ?? greeting_ char * 0x00415800 'Hello World!' 0:000> db 0x00415800 00415800 48 65 6c 6c 6f 20 57 6f-72 6c 64 21 00 00 00 00 Hello World!.... 00415810 48 00 65 00 6c 00 6c 00-6f 00 20 00 57 00 6f 00 H.e.l.l.o. .W.o. 00415820 72 00 6c 00 64 00 21 00-00 00 00 00 00 00 00 00 r.l.d.!.........
Question:
- What is the purpose of the NULL character:
00between ASCII characters inwchar_t– Win32?
wchar_tis a wide-character string, so each character takes 2 bytes of storage. ‘H’ asa wchar_tis 0x0048. Since x86 is little-endian, you see the bytes in memory in order 48 00.db in windbg will dump the bytes and provide how its viewed as an ASCII string, hence the H.E.L. … output you see. You can use ‘du’ to dump the memory as a unicode string.