0

我正在使用 Windows 7,并且我的程序有 64 位和 32 位版本。32 位版本工作得很好,但是,我在运行时遇到了 64 位版本的问题。我创建了一个列表视图项,并正在用我的信息填充列。它们都在打印,但有一个打印不正确。这是它正在打印的内容(我为缺少图片而道歉,但作为新成员我无法发布图片):

卡车

ÍÍÍÍHRZ141

ÍÍÍÍHRZ152

它似乎在我真正希望它显示的信息之前放置了 4 个空字符。经进一步检查,该地址似乎不正确。这是发生错误的代码的一部分:

Audit * audit = (Audit *)plvdi->item.lParam;

    switch(plvdi->item.iSubItem)
    {
    case 0:
      {
        plvdi->item.pszText = audit->Truck;
        while(plvdi->item.pszText[0] != 'H')
        {
          plvdi->item.pszText++;
        }
      }
      return true;

这是一个临时修复,因为我所有的卡车名称都以字符 H 开头。 plvdi->item.psz text 是列表视图项的文本显示,而 audit->Truck 是一个 char[]。它应该很简单:

sprintf(plvdi->item.pszText, audit->Truck);

但这似乎不起作用。它给我留下了同样的错误。运行时,地址 plvdi->item.pszText 比 audit->Truck 的地址少 4 个字节,在赋值语句之后(while 语句上的断点),我认为这是导致 4 个空字符的原因。我只是不确定如何在没有像我发布的那样的解决方法的情况下解决这个问题,为什么会发生这种情况,以及为什么只在 64 位解决方案中。预先感谢您在此问题上提供的任何帮助。

编辑:从我在程序中发现的其他类似问题来看,它似乎与指针有关。在选择向量之后出现的审计类中的所有内容都出现了问题,并且似乎偏离了 4 个字节。在另一堂课中,我发现指向审计的指针之后的一切都失败了,而且我也遇到了一些字符串问题(从技术上讲,它们是指向 char 数组的指针)。当我将带有指针的元素移动到头文件中类的末尾时,一切似乎又正常了。知道字符串、向量或其他类似结构是否具有依赖于 32 位或 64 位系统的指针吗?

4

1 回答 1

0

在 64 位 Windows 平台上,指针的 sizeof 为 8 字节,而在 32 位配置上为 4。检查您的代码以避免 4 字节大小的假设。

于 2014-11-05T10:33:23.700 回答