0

我继承了以下代码行:

TCHAR temp[300];
GetModuleFileName(NULL, temp, 300);

但是,这会失败,因为前 3 个字节被垃圾值填充(尽管总是相同的,-128、-13、23,按此顺序)。我说,好吧,改成:

TCHAR temp[300];
ZeroMemory(temp, 300);
GetModuleFileName(NULL, temp, 300);

但是垃圾值仍然存在!请注意,在 ZeroMemory() 调用之后,所有其他字节都被正确清零,并且在 GetModuleFileName() 之后,目录被正确地存储在缓冲区中。就好像 temp 被 temp+3 所取代。这可能与单词边界有关吗?

有人可以解释发生了什么以及如何解决它吗?

4

1 回答 1

1

ZeroMemoryTCHAR以字节为单位工作,而您有一个 300秒的数组。这让我假设您正在使用widechar(不是多字节)编译选项。

你应该使用:

ZeroMemory(temp, 300 * sizeof(TCHAR));

或者在您的特定情况下:

ZeroMemory(temp, sizeof(temp));

但是要小心后者。如果temp是一个自动数组,其声明在函数中可见,则适用。如果它是一个分配大小对编译器“不可见”的指针 -sizeof将只给出指针的大小。

于 2010-05-20T19:16:46.983 回答