代码之家  ›  专栏  ›  技术社区  ›  foobarfuzzbizz

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

  •  0
  • foobarfuzzbizz  · 技术社区  · 14 年前

    我继承了以下代码行:

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

    但是,这会失败,因为前3个字节中充满了垃圾值(但始终是相同的值,-128,-13,23,按这个顺序)。我说,很好,改为:

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

    但垃圾价值观依然存在!注意,在zeromemory()调用之后,所有其他字节都被正确地归零,在getmodulefilename()之后,目录被正确地存储在缓冲区中。就好像温度被温度+3所取代。这和单词边界有什么关系吗?

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

    1 回复  |  直到 14 年前
        1
  •  1
  •   valdo    14 年前

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

    你应该使用:

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

    或者在您的特定情况下:

    ZeroMemory(temp, sizeof(temp));
    

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