我是一个新手,目前正在使用c ++ / cli来包装我在.lib文件中使用过的几个类。我迫切需要使用" memset"在我的c ++ / cli中。这里的任何人都知道如何在c ++ / cli代码中使用memset?
我尝试在c ++ / cli代码中使用的c ++代码:
memset(&DeviceInfo, 0, sizeof(FS_DEVICE_INFO));
这是我的c ++ / cli代码,当我尝试使用c ++代码中的相同memset行时出现错误:
bool newIFSWDevice::GetDeviceInfo(PFS_DEVICE_INFO pDevInfo)
{
IFSDevice* pDeviceWheel = nullptr;
FS_DEVICE_INFO DeviceInfo;
int x = 0;
while (nullptr != (pDeviceWheel = newFSDeviceEnumerator::EnumerateInstance(x++)))
{
memset(&DeviceInfo, 0, sizeof(FS_DEVICE_INFO)); //error line
pDeviceWheel->GetDeviceInfo(&DeviceInfo);
if (0 == wcscmp(DeviceInfo.Name, FS_DEVICE_WHEEL_PORSCHE_NAME)
break;
我尝试使用for循环......
for (int i = 0; i <= sizeof(FS_DEVICE_INFO); i++)
FS_DEVICE_INFO[i] = 0;
但它仍然给我一个错误&#34;表达式必须有一个恒定值&#34;。非常感谢帮助! :)
答案 0 :(得分:0)
如评论中所述,您错过了标题文件#include <string.h>
。请参阅documentation。
还值得注意的是,执行清算的for
循环有几个问题:
for (int i = 0; i <= sizeof(FS_DEVICE_INFO); i++)
FS_DEVICE_INFO[i] = 0;
sizeof(FS_DEVICE_INFO)
以字节为单位给出了该结构的大小,但FS_DEVICE_INFO [i]索引为结构数组:[1]
将是数组中的第二个结构,不是第二个字节!您需要将指针强制转换为char
或类似的东西。i <= sizeof(FS_DEVICE_INFO)
:<=
不正确。如果结构大于10个字节,那么你最终会在字节0到10上运行,这总共是11个字节,踩到结构之后发生的任何事情。 FS_DEVICE_INFO[i]
:FS_DEVICE_INFO
是类的名称,您的本地变量为DeviceInfo
,因此应为DeviceInfo[i]
。这就是您收到expression must have a constant value
错误的原因。