gpt4 book ai didi

c++ - 警告 - 从 size_t 转换为 DWORD,可能丢失数据

转载 作者:行者123 更新时间:2023-11-28 05:01:01 25 4
gpt4 key购买 nike

我正在 VS 2015 上构建 64 位 C++ 代码。

DWORD blockLength;
blockLength = strlen((LPCSTR)sourceVar); // sourceVar is of type Cstring, build warning here.

// Allocate memory.
defaultBuffer = new unsigned char[blockLength + 1];

sprintf_s(reinterpret_cast<char*>(defaultBuffer), (blockLength + 1), "%s", (LPCSTR)sourceVar);

// Decrypt data
if (!someMethod(someParameter, 0, 1, 0, defaultBuffer, &blockLength))
{
// Do something
}

当我从 HP-fortify 运行代码时,我没有看到任何构建警告或任何强化问题。

但是,当我单独构建代码时,我在第二行看到这个警告 -

warning C4267: '=': conversion from 'size_t' to 'DWORD', possible loss of data

现在,当我进行这些代码更改时 -

blockLength = sourceVar.GetLength();

构建警告消失了。但是,当我针对 HP-Fortify 运行此新代码时,我现在在 sprintf_s 行看到以下错误 -

缓冲区溢出(输入验证和表示,数据流)-该函数在分配的内存范围之外写入,这可能会损坏数据、导致程序崩溃或导致恶意代码的执行。

最佳答案

在 64 位模式下,size_t 将是 64 位,但 DWORD 将始终是 32 位...因此,将 64 位值分配给 32 位值会丢失 size_t 的前 32 位,因此会出现警告。

为什么您只在 Release模式下获取它 - 不知道。

关于c++ - 警告 - 从 size_t 转换为 DWORD,可能丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45968559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com