为什么我的TCHAR中有垃圾,即使在ZeroMemory()之后?

时间:2010-05-20 18:07:30

标签: c++ windows string tchar

我继承了以下代码行:

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取代了。这可能与字边界有关吗?

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

1 个答案:

答案 0 :(得分:1)

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

您应该使用:

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

或者在您的具体案例中:

ZeroMemory(temp, sizeof(temp));

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