今天,我试图将unsigned long变量复制到unsigned char *变量的内容中。

这样做的原因是,我编写了一个RC4密码,要求密钥输入为unsigned char *,我正在使用SYSTEMTIME类获取值,并将其与随机生成的long值组合以获得密钥。对于RC4-我将其用作用户创建的帐户的时间戳,以在我的sqlite数据库中进行标记。

无论如何,我遇到的问题是我无法将ULONG复制到PUCHAR

我试过了

wsprintfA(reinterpret_cast<LPSTR>(ucVar), "%lu", ulVar);

我已经尝试过

wsprintfA((LPSTR)ucVar, "%lu", ulVar);

但是,执行我的程序后,ucVar中的结果为空,或者甚至不进行计算,并导致应用程序崩溃。

[编辑1]

我以为memcpy方法可能行得通,所以我尝试声明另一个变量并将其移到ucVar中,但它仍然使应用程序崩溃-即它没有达到MessageBox()

unsigned char *ucVar;
char tmp[64]; // since ulVar will never be bigger than 63 character + 1 for '\0'

wsprintfA(tmp, "%lu", ulVar);
memcpy(ucVar, tmp, sizeof(tmp));
MessageBox(0, (LPSTR)ucVar, "ucVar", 0);


[/编辑1]

[编辑2]

大小为64的ucVar上的HeapAlloc()解决了我的问题,谢谢ehnz的建议!

[/编辑2]

谁能给我一些解决这个问题的方法?非常感谢!

问候,
  安德鲁

最佳答案

除非您拥有要使用的内存所有权,否则所有事情都会发生。这些错误的范围可能是:从未引起注意的错误(因为没有其他东西已经拥有该内存)到立即崩溃,到一个消失的值(由于在设置时间和尝试从中检索值之间的其他时间覆盖了内存)它。

在处理动态内存分配时,基本概念是相当合理的,但是对于未启动的对象来说,这是个陷阱。

09-06 07:35