今天,我试图将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]
谁能给我一些解决这个问题的方法?非常感谢!
问候,
安德鲁
最佳答案
除非您拥有要使用的内存所有权,否则所有事情都会发生。这些错误的范围可能是:从未引起注意的错误(因为没有其他东西已经拥有该内存)到立即崩溃,到一个消失的值(由于在设置时间和尝试从中检索值之间的其他时间覆盖了内存)它。
在处理动态内存分配时,基本概念是相当合理的,但是对于未启动的对象来说,这是个陷阱。