我使用的是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文本是列表视图项的文本显示,而audit-> Truck是一个炭[]。它应该简单:
sprintf(plvdi->item.pszText, audit->Truck);
但这似乎不起作用。它给我留下了同样的错误。运行时,地址plvdi-> item.pszText比audit-> Truck的地址小4个字节,在赋值语句(while语句上的断点)之后,我相信这会导致4个空字符。我只是不确定如何解决这个问题而不解决我发布的问题,为什么会发生这种问题,以及为什么只能在64位解决方案中解决。提前感谢您对此事的任何帮助。
编辑:从我在程序中发现的其他类似问题来看,它似乎与指针有关。在我的Audit类中,在选择向量之后出现的所有内容都存在问题,并且似乎关闭了4个字节。在另一个类中,我发现在指向审计的指针之后发生的所有事情都失败了,我也遇到了一些字符串问题(技术上指向char数组的指针)。当我将带有指针的元素移动到头文件中类的末尾时,一切似乎再次正常工作。知道字符串,向量或其他类似结构是否具有依赖于32或64位系统的指针?
答案 0 :(得分:0)
在64位Windows平台上,指针的sizeof为8字节,而在32位配置上为4。检查代码以避免4字节大小假设。